System and method for location aware processing

ABSTRACT

A methodology for preparing a series of instruction operations for execution by plurality of arithmetic logic units (ALU) is provided. The methodology includes first assigning a first instruction operation to the first ALU; first determining, for a second instruction operation having an input that depends directly on an output of a first instruction operation, whether all inputs for the second instruction operation are available within a locally predefined range from the first ALU; second assigning, in response to at least a positive result of the first determining, the second instruction operation to the second ALU; in response to a negative result of the first determining: ensuring a pause of at least one clock cycle will occur between execution of the first instruction operation and the second instruction operation; and third assigning the second instruction operation to an ALU of the plurality of ALUs.

CROSS REFERENCE TO RELATED APPLICATIONS

The instant application claims priority to U.S. Provisional PatentApplication No. 62/764,767 entitled SYSTEM AND METHOD FOR LOCATION AWAREPROCESSING filed Aug. 16, 2018, the contents of which are expresslyincorporated herein by reference in its entirety.

FIELD OF THE INVENTION

The various embodiments described herein relate generally to processorswith high clock speed. More specifically, embodiments of the applicationrelate to a processing architecture and related methodology thatutilizes location-aware processing that assigns Arithmetic Logic Units(ALU) in a processor to instruction operations based on priorallocations of ALUs to prior instruction operations. Such embodimentsminimize the influence of internal transmission delay on wires betweenALUs in a processor, with a corresponding significant increase in clockspeed, reduction in power consumption and reduction in size.

BACKGROUND

In recent years, clock speed of processors in modern computing hassubstantially plateaued. Referring now to FIG. 1, a logarithmic graph100 shows the evolution of transistor size, clock speed and performancefrom 1975-2015 (data adapted from 40 Years of Microprocessor Trend Data,Karl Rupp, Jun. 25, 2015). Transistors have continued to reduce in sizealong a fairly linear path 102; since smaller transistors are fasterthan larger transistors, the decrease in transistor size has produced acorresponding increase in transistor switching speed by a factor ofeight, roughly every nine years, although this is slowing even more inmore recent years. Transistors make up the ALUs inside processors thatperform operations.

Prior to 2000, the predominant factor in CPU clock speed and performancewas the transistor speed. Thus, from 1975-2000, as transistor sizedecrease along path 102, clock speed curve 104 improved at a nearlycorresponding linear path and performance curve 106 similarly remainedalong a fairly linear path.

In the early 2000s, clock speed began to peak and performanceimprovements with each product generation flattened. Despite continuingimprovement in transistor size and speed, clock speed showed minimalimprovement from 2010-2015. Processor technology was simply no longerable to fully leverage reduction of transistor size into an improvementin clock speed. Performance continued with slight improvement over thattime period, although it was relatively modest and largely attributableto other improvements in processor technology.

A reason for the peaking of clock speed is an increased influence offactors other than transistor speed. Prior to 2000 the influence ofthose factors were so small compared to the influence of transistorspeed that these other factors were effectively inconsequential; thusclock speed and performance improvements tracked improvements intransistor speed. However, eventually the transistors became so smalland fast that the influence of these other factors was no longernegligible and over time evolved into significant limiting factors. Oneof these factors is the time of transmission, which is set in part bythe amount of time it takes for a signal to complete its travel over awire from whatever source produced the signal to the ALU that wouldconsume it (which includes technical consideration in such time,including but not limited to charging and inductive effects, leakage,etc.).

The factors of transistor speed and wire delays (time of transmission)both contribute to the clock speed of the supporting system. Moderncomputing is based on a guarantee of two events occurring within asingle clock cycle. First, an Arithmetic Logic Unit (“ALU”) will receiveand select as inputs from whatever source within the core generatedthose inputs; this implicates the time of transmission for the inputs totravel from the source to the ALU. Second, the ALU will perform aprocessing step on the received/selected input(s); this implicates thetime of processing.

In this context, the reduction in the size of the transistors and thewires have offsetting effects—the reduction in transistor size decreasesthe time for processing, while the reduction in wire size increases thetime for transmission because thinner wires (in height and width) aremore resistant to signal flow.

While the effects are offsetting, historically they have not beencomparable. Prior to 2000, the time of processing was so much largerthan the time of transmission (e.g., on the order of about 100 timesgreater) that the time of transmission (even as it was increasing) wasnegligible to the establishment of clock speed. This is reflected in thepre-2000 time frame of graph 100, where improvements in clock speed andperformance tracked improvements in transistor size.

As the size of the transistors and wires continued to reduce, the timeof processing continued to decrease, but the time of transmissioncontinued to increase, at a much higher pace. Eventually the gap betweenthe two narrowed to where the time of transmission was no longernegligible compared to the time of processing, and as such, theincreasing transmission time became an increasingly consequentialoffsetting factor against the time of processing.

This is understood in context by the layout of ALUs within a core.Referring now to FIGS. 2A and 2B, as is known in the art, a core 205 ofa processor 250 includes a data path 207 with 4-8 ALUs 202 that executethe program instructions. Data path 207 may include at least one simpleALU (performing functions including, e.g., integer arithmetic (add,subtract), boolean logic (and, or, complement) and shifts (left, right,rotate)) and at least one complex ALU (performing functions including,e.g., integer operations (multiply and divide), floating pointoperations (add, subtract, multiply, divide) and even mathematicalfunctions (square root, sine, cosine, log, etc.)).

FIG. 2B shows a prior art data path with six ALUs 202 (204, 206, 208,210, 212 and 214) along a data path 216, of which four (208, 210, 212,214) are simple ALUs and two (204, 206) are a complex ALUs. The datapath 216 includes an operand selection unit 215 for each ALU tocollectively define an operand selection network and selects thespecific inputs available on data path 216 that are input to itscorresponding ALU. Registers 217 present values for use by the ALUs 202,and such values may be provided earlier by prior activity of an ALU.

FIG. 2C provides a more detailed discussion of the layout of FIG. 2B fora layout of ALUs 202 including ALU 204, 206, 208 and 210. Each ALUexecution unit 202 is composed of adder 262 and logic unit 263. Theadder 262 may be used to calculate address for memory read described byload instruction and for memory write described by store instruction. Inaddition adder 262 may be used for executing conditional branches. Basedon whether the ALU is simple or complex, the logic unit may includebitwise logic unit, shifter, sign extension, logic, and many otheroperations. Each ALU 202 receives operands through inputs 261 and 262.The inputs 261 and 262 are coupled to adder 262 and logic unit 263 toprovide operands for operation execution. The result from adder 262 iscoupled to multiplexor 266 via coupling 264 and results from logic unit263 is coupled to multiplexor 266 via coupling 265. The multiplexorselects results from adder 264 or logic unit 263 depending on whatoperation is requested. The result of multiplexor 266 is transferred tooutput register 268 via coupling 267.

The plurality of operand selection units 215 are shown as 220, 230, 240,245 are used to select operands for ALUs 204, 206, 208, 210. Eachoperand selection unit 215 selects operand 261 for ALU 260 bymultiplexor 221 coupled to adder 262 and logic 263 via coupling 261. Themultiplexor 221 selects operands from memory ports 252 or 254, register256 using coupling 258, ALU 204 via coupling 269, ALU 206 via coupling279, ALU 208 via coupling 289, or from ALU 210 via coupling 299.Similarly operand selection unit 220 selects operand 262 for ALU 260 bymultiplexor 222 coupled to adder and logic unit via coupling 262. Themultiplexor 222 can similarly select from such available inputs, or fromimmediate operand constant 223.

Data provided by memory ports 252 and 254, as well as the results ofALUs 220, can be written to registers 217 and made available forsubsequent computations.

The transmission time of the wires that connect the ALUs 202 has aspecific impact on the processor methodology of the prior art. Tomaintain the guarantee of completing the signal receipt and processingwithin a single clock cycle, the clock speed must be set to allow for acombination of the worst case scenarios for both the communication andthe processing events. On the processing side, the worst case scenariois the most time consuming operation that an ALU would process within asingle clock cycle (not including processes that are not expected tocomplete within one clock cycle). On the transmission side, the worstcase scenario is the furthest distance that the input signal would haveto travel to reach the ALU that performs the operation. The overallworst case scenario is when an ALU is tasked with the most timeconsuming processing operation that requires inputs from the furthestdistance away.

By way of example in FIG. 2B, for purposes of explanation the mostcomplicated operation that can be completed by an ALU in a single clockcycle is “shift” by one of the complex ALUs 204 or 206. The mostcomplicated transmission distance is for ALU 204 on one end of data path216 to select inputs from the farthest ALU 214 on the opposite side ofthe data path. The worst case scenario timewise is when the ALU 204needs to perform shift based on input from the ALU 214. The clock cycleof the chip for ALUs 202 must be larger than that worst case scenario toguarantee the operation can be performed.

Whatever the worst case scenario is for a particular chip, when theclock cycle is set to allow for the worst case scenario to occur withina single clock cycle, then the clock cycle will be long enough toguarantee that any other (single clock cycle) operation can be performedwith that clock cycle, as that other operation will be less taxing intotal transmission and processing, and can be performed within thesingle clock cycle.

In contrast, setting the clock cycle shorter that the worst casescenario would violate that guarantee, as the correct results may not beproduced within the clock cycle and other ALUs that are instructed touse the results of that process would receive incorrect information andproduce incorrect results themselves. For example in FIG. 2B, if theclock cycle was not long enough for ALU 204 to receive input from ALU214, then ALU 204 would produce an incorrect output that would propagateto other ALUs that rely upon the output of ALU 204.

The prior art clock cycle may thus be defined by the following equation:

Minimum clock cycle time=tmaxglobalcomm+tmaxop+toh; and

Maximum clock speed=(1/minimum clock cycle time)

where:

-   -   tmaxglobalcomm is the maximum amount of time that would be taken        for one ALU to receive and select content from another ALU        within the data path;    -   tmaxop is the maximum amount of time that one ALU would take to        complete a processing step within a single clock cycle; and    -   toh is the time allocated to “overhead” parameters as are known        in the art, including but not limited to one or more of the        following: clock skew and clock jitter, variation of process,        temperature or voltage, ground bounce, simultaneous switching,        signal integrity, Miller effect, guard band and/or aging.

Referring back to FIG. 1, in the 1990's the time of communication (i.e.wire delay) was negligible compared to time of processing (i.e.transistor switching speed). A typical example of approximate values forthat time period may be tmaxop=9.5 nanoseconds (ns), tmaxglobalcomm=200picoseconds (ps) and toh=300 ps. Thus in this circa 1990's example:

$\begin{matrix}{{{Minimum}\mspace{14mu} {clock}\mspace{14mu} {cycle}\mspace{14mu} {time}} = {{9.5\mspace{14mu} {ns}} + {200\mspace{14mu} {ps}} + {300\mspace{14mu} {ps}}}} \\{= {10\mspace{14mu} {ns}}}\end{matrix}$ Maximum  clock  speed = 1/10  ns = 100  MHz

This was a common speed for home computers circa 1997. The resultingequation was so dominated (in this example 95%) by the time ofprocessing that the influence of the other factors was minimal (in thisexample, 5%).

The flattening of the clock speed curve 104 after 2005 in FIG. 1reflects the narrowing of the gap of the influence of the time factors.Given the size of components circa year 2018, the time of processing forthe worst case operation is similar to the time of communications forworst case transmission from one corner of the core to another. By wayof example, for a current processor (with massively faster transistorswitching speed than 20 years ago, and with significantly more wiredelay/time of transmission) approximate values maybe tmaxop=120 ps,tmaxglobalcomm=120 ps, and toh=20 ps. Thus in this year 2018 example:

$\begin{matrix}{{{Minimum}\mspace{14mu} {clock}\mspace{14mu} {cycle}\mspace{14mu} {time}} = {{120\mspace{14mu} {ps}} + {120\mspace{14mu} {ps}} + {20\mspace{14mu} {ps}}}} \\{= {260\mspace{14mu} {ps}}}\end{matrix}$ Maximum  clock  speed = (1/260  ps) = 3.85  Ghz.

This was a common speed for home computers circa 2018. Whereas for circa1997 technology the equation was 95% dominated by the time ofprocessing, for circa 2018 technology the influence of time ofprocessing is similar to that of time of transmission.

The above examples can show practical limits of further reductions intransistor size, and corresponding time of processing. If hypotheticallythe transistors were improved in speed to reduce the processing time by85% over the circa 2018 numbers above, then the tmaxop could drop toabout 20 ps. This would cause a corresponding reduction in wire size,with a corresponding increase in the worst case time of transmission.Presuming a conservative 20% increase in time of transmission for a onemillimeter long wire due to wire size (for a correspondingTmaxglobalcomm of approximately 140 ps) and keeping other factors thesame for purpose of illustration, the parameters for this hypotheticaltransistor are:

Minimum clock cycle time=20 ps+140 ps+20 ps=180 ps

Maximum clock speed=5.55 Ghz

An 85% reduction in processing time (120 ps to 20 ps) relative tocurrent levels represents an enormous investment of time and expense.Yet it would only improve clock speed by about 44% (3.85 Ghz to 5.55Ghz), which is a poor recovery relative to the underlying investment.The reason for the lack of comparable improvement between the transistorsize and clock cycle time is that the influence of time of processing isbecoming negligible, while the influence of time of transmission—onceitself a negligible factor—has now become dominant.

Efforts have been made to improve clock speed by reducing the time oftransmission. Once type of effort was to change the composition of thewires to something with lower resistance, such as from an aluminum basedcompound to a copper based compound. Another type of effort was tooptimize the layout of chip ALUs to minimize the distances that signalshad to traverse. Another type of effort was to cool the chips, as coolerwires will have lower resistance with respect to signal transmission.

2. Instruction Execution

Any particular processor is designed with an instruction setarchitecture (ISA). A common type of ISA is Complex Instruction SetComputing (CISC) where single instructions can execute several low-levelmachine operations (such as a load from memory, an arithmetic operation,and a memory store) or are capable of multi-step operations oraddressing modes within single instructions. Another common ISA isReduced Instruction Set Computer (RISC), which uses a small set ofsimple and general instructions, rather than a large set of complex andspecialized instructions as in CISC.

CISC and RISC allow programs to specify instructions to execute insequence only. Another ISA that does not is Very Long Instruction Word(VLIW), in which several instructions can be group into an instructionword, and the multiple instructions in the instruction word can beexecuted at the same time (i.e. during the same clock cycle),concurrently, in parallel. A limitation of VLIW is that the instructionswithin any instruction word may not have any direct interdependencies,such as when a first instruction operation's result is used as a secondinstruction operation's input, then they cannot execute at the same timeand the second instruction cannot execute until the first instructionhas completed.

BRIEF DESCRIPTION OF THE DRAWINGS

Various embodiments in accordance with the present disclosure will bedescribed with reference to the drawings, in which:

FIG. 1 illustrates a graph of processor parameters from the early 1970sthrough 2015.

FIG. 2A is a block diagram of a prior art processor chip.

FIGS. 2B and 2C are block diagrams of a prior art ALU layout within adata path of a prior art chip.

FIGS. 3A and 3B show non-limiting examples of ALUs in producer-consumerrelationships.

FIG. 4 shows a processor chip according to an embodiment of theinvention.

FIG. 5A is a prior art arrangement of a pair of ALUs.

FIG. 5B is an embodiment of an arrangement of a pair of ALUs.

FIG. 6 is an embodiment of an arrangement of ALUs in a data path.

FIGS. 7A-7E are dependency graphs.

FIG. 8 is a flowchart of an embodiment of the invention for assigninginstruction operations to ALUs.

FIG. 9 is a flowchart of an embodiment of node selection block from FIG.8.

FIGS. 10A and 10B are block diagrams of an embodiment of instructionwords.

FIGS. 11A-11E are block diagrams of instructions words populatedaccording to an embodiment of the invention.

FIGS. 12A-12D are block diagrams of instructions words populatedaccording to an embodiment of the invention.

FIGS. 13A-13B are block diagrams of instructions words populatedaccording to an embodiment of the invention.

FIGS. 14A-14C are block diagrams of instructions words populatedaccording to an embodiment of the invention.

FIGS. 15A-15J are block diagrams of instructions words populatedaccording to an embodiment of the invention.

FIG. 16 is a flowchart of an embodiment of the invention for executinginstruction words.

FIGS. 17-21 are embodiments of different data paths.

FIG. 22 shows a layout of a mirrored ALU pair such as shown in FIG. 5.

FIG. 23 shows a layout of a mirrored ALU pair in combination with acomplex ALU such as shown in FIG. 21.

FIG. 24 shows groups of ALUs of FIG. 24.

OVERVIEW

According to an embodiment of the invention, a method for preparing aseries of instruction operations for execution on a device is provided.The device has plurality of arithmetic logic units (ALU) within a datapath including at least first, second and third ALUs, the second ALUbeing within a locally predefined range of the first ALU and the thirdALU being outside of the locally predefined range of the first ALU, thelocally predefined range being smaller than the data path. The methodincludes: first assigning a first instruction operation to the firstALU; first determining, for a second instruction operation having aninput that depends directly on an output of a first instructionoperation, whether all inputs for the second instruction operation areavailable within a locally predefined range from the first ALU; secondassigning, in response to at least a positive result of the firstdetermining, the second instruction operation to the second ALU; inresponse to a negative result of the first determining: ensuring a pauseof at least one clock cycle will occur between execution of the firstinstruction operation and the second instruction operation; and thirdassigning the second instruction operation to an ALU of the plurality ofALUs.

The operations of the above method embodiment may also be provided in anembodiment as a computer hardware device having a clock speed and aclock cycle, where the device is programmed to execute a series ofinstructions stored in a non-transitory memory to perform the recitedoperations. The operations of the above method embodiment may also beprovided in an embodiment as a non-transitory computer readable mediumstoring instructions to perform the operations to assign instructionoperations to a device.

The above embodiments may have various optional features. A clock speedof the device can be defined in part on a worst case time oftransmission between a consumer ALU and producer ALU of the plurality ofALUs within the locally predefined range. The locally predefined rangecan be a distance between two adjacent ALUs. The locally predefinedrange is further defined by inputs and outputs of the two adjacent ALUsfacing each other. The first and second ALUs can be the same, and thelocally predefined range can be an ALU to itself. The clock cycle of thedevice can be shorter than an amount of time needed to guarantee thatthe third ALU (a) receives and selects an input produced from the firstALU and (b) executes the second instruction operation. The ensuring caninclude second determining whether the first and second instructionoperations are already separated in time of execution by at least oneclock cycle of the device, and in response to a negative outcome of thesecond determining, inserting a delay of at least one clock cycle of thedevice between execution of the first and second instruction operations.The first and second assigning may further comprises setting the firstand second instruction operations to be executed during a same clockcycle of the device.

According to an embodiment of the invention, a method for creating andexecuting instruction words for simultaneous execution of instructionoperations by a plurality of Arithmetic Logic Units (ALUs) in a datapath operating on a clock cycle is provided. The method includescreating a dependency graph of nodes with instruction operations, thegraph including at least a first node having a first instructionoperation and a second node having a second instruction operation, thesecond instruction operation being directly dependent upon the outcomeof the first instruction operation; first assigning the firstinstruction operation to a first instruction word; second assigning asecond instruction operation: to the first instruction word uponsatisfaction of a first at least one predetermined criteria; and to asecond instruction word, that is scheduled to be executed during a laterclock cycle than the first instruction word, upon satisfaction of asecond at least one predetermined criteria; and executing, in parallelby the plurality of ALUs and during a common clock cycle, anyinstruction operations within the first instruction word.

The operations of the above method embodiment may also be provided as anembodiment of a system for creating and executing instruction words forsimultaneous execution of instruction operations, where the systemincludes a plurality of Arithmetic Logic Units (ALUs) in a data pathoperating on a clock cycle and a non-transitory computer readable memorystoring instructions, where the system is being programmed to implementthe instructions to perform the above operations. The operations of theabove method embodiment may also be provided as an embodiment of anon-transitory computer readable medium storing instructions programmedto cooperate with a system to cause the system to perform the aboveoperations to create and execute instruction words for simultaneousexecution of instruction operations by a plurality of Arithmetic LogicUnits (ALUs) in a data path operating on a clock cycle.

The above embodiments may have various optional features. The second atleast one predetermined criteria can be a failure to satisfy the firstat least one predetermined criteria. The first at least onepredetermined criteria may include the first instruction word hassufficient capacity to hold the second instruction operation. The firstat least one predetermined criteria may include both the first andsecond instruction operations are guaranteed under normal operation tobe completed within the same clock cycle. The first at least onepredetermined criteria may include the first and second instructionoperations are not prohibited by any predefined rule from being in thefirst instruction word. The first assigning may include assigning thefirst instruction operation of the first instruction word to a first ALUof the plurality of ALUs. The first at least one predetermined criteriamay include that a second ALU of the plurality of ALUs is availablewithin a locally predefined range from a first ALU, the locallypredefined range being smaller than the data path. The operations mayinclude ensuring that at least one clock cycle separates execution ofthe first instruction word and the second instruction word.

According to an embodiment of the invention, a processor has a firstgroup of ALUs including first, second and third ALUs. The first ALU hason a first side an input and an output. The second ALU has a first sidefacing the first side of the first ALU, an input and an output on thefirst side of the second ALU and being in a rotated orientation relativeto the input and the output of the first side of the first ALU, and anoutput on a second side of the second ALU. The third ALU has a firstside facing the second side of the second ALU, and an input and anoutput on the first side of the third ALU. The input of the first sideof the first ALU is logically directly connected to the output of thefirst side of the second ALU. The input of the first side of the secondALU is logically directly connected to the output of the first side ofthe first ALU. The output on the second side of the second ALU islogically directly connected to the input on the first side of the thirdALU.

The above embodiment may have various optional features. A pathway mayextend between the first and second ALUs, the pathway being a conduit bywhich data is provided to and received from the first group of ALUs. Thepathway may include an operand selection network between the first andsecond ALUs that controls data flow between the first and second ALUs.The output on the first side of the third ALU may be logically directlyconnected to the operand selection network. The operand selectionnetwork may be logically directly connected to the input and the outputon the first side of the first ALU. The operand selection network may belogically directly connected to the input and the output on the firstside of the second ALU. The processor may have a clock speed based upona worst case combination of: (a) a most time consuming process thatcould be performed in one clock cycle by any of the first, second and/orthird ALUs, and (b) a most amount of time it would take for the any ofthe first, second and/or third ALUs performing (a) to receive any neededinputs from the pathway and remaining ALUs of the first, second andthird ALUs. The first and second ALUs may be limited to a first set oftypes of operations, and the third ALU may be limited to a second set oftypes of operations, where the second set of types of operationsincludes more complicated operations than the first set of types ofoperations. The first side of the first ALU, the first and second sidesof the second ALU, and the first side of the third ALU may be inparallel. The second side of the second ALU may lack an input. Theprocessor may include a plurality of groups of ALUs, each of the groupsof ALUs having a layout identical to the first group of ALUs.

According to another embodiment of the invention, a processor has aplurality of group of ALUs, each group including first, second and thirdALUs. Within each group of ALUs is a first ALU, second ALU, and thirdALU. A common pathway extends into each group between the first andsecond ALUs, the common pathway being a conduit by which data isprovided to and received from each group of ALUs and exchanged betweenthe groups of ALUs. The first ALU has on a first side an input and anoutput. The second ALU has a first side facing the first side of thefirst ALU, an input and an output on the first side of the second ALUand being in a rotated orientation relative to the input and the outputof the first side of the first ALU, and an output on a second side ofthe second ALU. The third ALU has a first side facing the second side ofthe second ALU, and an input and an output on the first side of thethird ALU. The input of the first side of the first ALU is logicallydirectly connected to the output of the first side of the second ALU.The input of the first side of the second ALU is logically directlyconnected to the output of the first side of the first ALU. The outputon the second side of the second ALU is logically directly connected tothe input on the first side of the third ALU.

The above embodiment may have various optional features. The processormay have a clock speed based upon a worst case combination of: (a) amost time consuming process that could be performed in one clock cycleby any of the first, second and/or third ALUs, and (b) a most amount oftime it would take for the any of the first, second and/or third ALUsperforming (a) to receive any needed inputs from the pathway andremaining ALUs of the first, second and third ALUs. The processor mayhave a clock speed that is too fast to accommodate a combination of: (a)a most time consuming process that could be performed in one clock cycleby any of the first, second and/or third ALUs within a particular one ofthe groups of ALUs, and (b) receive any needed inputs from outside theparticular one of the groups of ALUs. The pathway may include an operandselection network between the first and second ALUs that controls dataflow between the first and second ALUs. The output on the first side ofthe third ALU may be logically directly connected to the operandselection network. The operand selection network may be logicallydirectly connected to the input and the output on the first side of thefirst ALU. The operand selection network may be logically directlyconnected to the input and the output on the first side of the secondALU. Within each of the groups of ALUs the first and second ALUs may belimited to a first set of types of operations, and the third ALU may belimited to a second set of types of operations, where the second set oftypes of operations includes more complicated operations than the firstset of types of operations. Within each of the groups of ALUs the first,second and third ALUs may be aligned in a linear path. Within each ofthe groups of ALUs the first side of the first ALU, the first and secondsides of the second ALU, and the first side of the third ALU may be inparallel. Within each of the groups of ALUs the second side of thesecond ALU may lack an input.

According to an embodiment of the invention, a method for populating aninstruction word for simultaneous execution of instruction operations bya plurality of ALUs in a data path is provided. The method includes:creating a dependency graph of instruction nodes, each instruction nodeincluding at least one instruction operation; first selecting a firstavailable instruction node from the dependency graph; first assigningthe selected first available instruction node to the instruction word;second selecting any available dependent instruction nodes that aredependent upon a result of the selected first available instruction nodeand do not violate any predetermined rule; second assigning to theinstruction word the selected any available dependent instruction nodes;and updating the dependency graph to remove any instruction nodesassigned during the first and second assigning from furtherconsideration for assignment.

The operations of the above method embodiment may also be provided as anembodiment of a system that includes a plurality of Arithmetic LogicUnits (ALUs) in a data path operating on a clock cycle and anon-transitory computer readable memory storing instructions, where thesystem is programmed to implement the instructions to perform the aboveoperations. The operations of the above embodiment may also be providedas an embodiment of a non-transitory computer readable media storinginstructions populating instruction words for simultaneous execution ofinstruction operations by a plurality of ALUs in a data path, which whenexecuted by a system, cause the system to perform the disclosedoperations.

The above embodiment may have various optional features. The operationsmay include after the second assigning: determining whether theinstruction word is complete or incomplete; returning to the firstselecting in response to the instruction word being incomplete per thedetermining; and closing the instruction word in response to theinstruction word being complete per the determining. The operations mayinclude creating a new instruction word in response to (a) the closingand (b) the dependency graph still has unassigned instruction nodes. Theupdating may include (a) removing from the dependency graph anyinstruction nodes assigned during the first and second assigning, or (b)marking any instruction nodes assigned during the first and secondassigning as unavailable for further assignment to the instruction word.The first assigning may assign the selected first available instructionnode to a first ALU slot of the instruction word, the first ALU slotcorresponding to a first ALU of the plurality of ALUs. The secondassigning may assign one of the any available dependent nodes to asecond ALU slot of the instruction word, the second ALU slotcorresponding to a second ALU of the plurality of ALUs where the firstand second ALUs are within a locally predefined range of each other. Theoperations may include in response to absence of an available nodeduring the first selecting, bypassing the first assigning, secondselecting and second assigning. The operations may include initiallydesignating, after the creating, any of the instruction nodes in thedependency graph as global, wherein a global designation represents thatthe instruction nodes requires inputs that are outside of a predefinedphysical range of ALUs, the range being smaller than the full extent ofthe data path, and the any predetermined rule includes that theinstruction node may not include an available dependent instruction nodethat is dependent upon a result of the selected first availableinstruction node when the an available dependent instruction node isdesignated as global. The initially designating, in response to beingunable to determine whether a particular instruction node is global, maydesignate the particular instruction node as non-global.

According to an embodiment of the invention, a method for populatingmultiple instruction words for execution of instruction operations by aplurality of ALUs in a data path is provided. The method includes:creating a dependency graph of instruction nodes, each instruction nodeincluding at least one instruction operation; first assigning a firstinstruction node to a first instruction word; identifying a dependentinstruction node that is directly dependent upon a result of the firstinstruction node; first determining whether the dependent instructionnode requires any input from two or more sources that are outside of apredefined physical range of each other, the range being smaller thanthe full extent of the data path; second assigning, in response tosatisfaction of at least one predetermined criteria including a negativeresult of the first determining, the dependent instruction node to thefirst instruction word; and third assigning, in response to a negativeresult of the first determining and violation of any of the at least onepredetermined criteria, the dependent instruction node to a secondinstruction word; wherein execution of the first and second instructionwords occur at different clock cycles.

The operations of the above method embodiment may also be provided as anembodiment of a system for populating multiple instruction words forinstruction operations, where the system includes a plurality ofArithmetic Logic Units (ALUs) in a data path operating on a clock cycle,a non-transitory computer readable memory storing instructions, and thesystem is programmed to implement the instructions to perform theoperations. The operations of the above method embodiment may also beprovided as an embodiment of a non-transitory computer readable mediastoring instructions for populating multiple instruction words ofinstruction operations by a plurality of ALUs in a data path, which whenexecuted by a system cause the system to perform the operations.

The above embodiment may have various optional features. The operationsmay further include fourth assigning, in response to at least a positiveresult of the first determining, the dependent instruction node to athird instruction word, where execution of the first and thirdinstruction word are separated by at least one clock cycle. Theoperations may further include optimizing, after the first and secondassigning, assignments of instruction nodes of the dependency graph tothe first and second instruction words; and executing, after theoptimizing, the first and second instruction words. The operations mayfurther include: first executing the first instruction word during afirst clock cycle; determining whether executing the second instructionword in a second clock cycle immediately after the first clock cyclewould result in at least one violation of at least one predeterminedrule; second executing, in response to a negative result of the seconddetermining, the second instruction word during the second clock cycle;delaying execution of the second instruction word, in response to apositive result of second determining, by at least one clock cycle untilthe at least one violation resolves; and third executing, in response toresolution of the at least one violation, the second instruction word.The delaying may include generating an instruction word that eitherlacks instruction operations or contains instruction operations for theALUs to take no action during a corresponding clock cycle. The at leastone predetermined rule may include a guarantee that the ALUs willreceive all inputs needed for all the instruction operations of thesecond instruction word and will execute the all the instructionoperations of the second instruction word within the second clock cycle.

DETAILED DESCRIPTION

In the following description, various embodiments will be illustrated byway of example and not by way of limitation in the figures of theaccompanying drawings. References to various embodiments in thisdisclosure are not necessarily to the same embodiment, and suchreferences mean at least one embodiment. While specific implementationsand other details are discussed, it is to be understood that this isdone for illustrative purposes only. An individual skilled in therelevant art will recognize that other components and configurations maybe used without departing from the scope and spirit of the claimedsubject matter.

Several definitions that apply throughout this disclosure will now bepresented. The term “substantially” is defined to be essentiallyconforming to the particular dimension, shape, or other feature that theterm modifies, such that the component need not be exact. For example,“substantially cylindrical” means that the object resembles a cylinder,but can have one or more deviations from a true cylinder. The term“comprising” when utilized, means “including, but not necessarilylimited to”; it specifically indicates open-ended inclusion ormembership in the so-described combination, group, series and the like.The term “a” means “one or more” absent express indication that it islimited to the singular. “First,” “second,” etc., are labels todifferentiate like terms from each other, and does not imply any orderor numerical limitation.

“Core” is a term of art and refers to an independent processing unitfound on a processor chip. A processor chip may have multiple cores.

“Arithmetic logic unit” (ALU) is a term of art, and refers to acombinational digital electronic circuit that performs arithmetic andbitwise operations on integer binary numbers.

Two ALUs may have a relationship in which one ALU generates a result asan output and a second ALU receives that output result as an input thatthe second ALU will use/consume in a further processing step. Todistinguish between the two components in that relationship, “producer”refers to the component that generates an output result, and “consumer”refers to the component that consumes the previously generated outputresult. ALUs can be in multiple producer/consumer relationships, as asingle ALU can both receive a result that it consumes (and is thus aconsumer ALU) and produces a result from that consumption (and is thus aproducer ALU). Components other than ALUs can also be consumers orproducers, e.g., a register that provides a value to an ALU is producer.

By way of non-limiting example in FIG. 3A, ALU 208 provides an output toALU 210, and ALU 210 provides its output to ALU 212. ALU 208 and ALU 210are thus in a consumer-provider relationship 302 where ALU 208 is aprovider and ALU 210 a consumer. ALU 210 and ALU 212 are also in aconsumer-provider relationship 304 where ALU 210 is a provider and ALU212 a consumer; ALU 210 is thus both a consumer ALU in one relationshipand a provider ALU in another relationship.

Referring now to FIG. 3B, a specific example of provider-consumerrelationship is when an ALU receives as input, feedback from its prioroutput. In this example, the ALU 214 is both a provider and a consumerin that it provides the output that it consumes as input.

“Data path” refers to the group of ALUs on a core that are specificallydedicated to executing program instructions.

“Local communication,” “local,” “locally,” “locally predefined range” orthe like means structures, communications, processes or the like thatare contained with a predefined limited physical range of ALUs, whichrange is smaller than the full extent of the data path. A non-limitingexample of local communication is a defined range of communication froman ALU to itself as is shown in FIG. 3B. Another non-limiting example isa defined range of any immediately adjacent ALU, i.e., one ALU distance(e.g., for the layout in FIG. 2B, from ALU 204-206, ALU 206-208, ALU208-210, etc.). Another non-limiting example is an ALU within a two ALUdistance. Another non-limiting example is ALUs in certain directions,such as an adjacent ALU to the left but not the right. Another exampleis a particular type of ALU relationship (e.g., a mirrored ALU asdescribed below). The invention is not limited to any particulararrangement as local, other than as predefined.

“Global communication,” “global,” “globally,” “non-local communication,”“non-local” or the like means structures, communications, processes orthe like that require receipt of signals from outside the defined scopeof local (e.g., in distance, orientation, and/or relationship). By wayof a non-limiting example, if the local communication range is definedby an ALU to itself, then communications from an ALU to any other ALU isa “global communication” (e.g., for the layout in FIG. 2B, ALU 208 toALU 210 is global because ALU 210 is not ALU 208). In anothernon-limiting example, if the local communication range is defined by oneadjacent ALU, then communications from an ALU to another ALU that is notadjacent is a “global communication” (e.g., for the layout in FIG. 2B,ALU 204 to ALU 206 is local because the two are adjacent, whereas ALU204 to ALU 208/210/212/214/216 is global because ALU 204 is not adjacentto these others but rather more than one ALU distance away).

Some signals may be global or local by their nature. For example, thevalues provided by registers may be available at the input of the ALUswith the data pathway and may thus always be local. Non-limitingexamples of local may include constants (also called immediateoperands), data read from memory over multiple cycles, or data read froma special register, special storage, or special execution unit.Non-limiting examples of global may include ALU bypass network, theresult from a complex or specialized execution unit such as multiplier,or data from load execution unit. The invention is not limited to whatsignals are local or global, other than as may satisfy the predeterminedrules for the same.

“Defined,” “definition” or the like in the context of local is thevarious applicable rules that determine whether a particular situationis local or global. It is to be understood that “defined” or the like isused as an open set (e.g., consistent with “comprising”) in that aparticular definition as discussed herein may have other rules that arenot specified. By way of non-limiting example, a “definition” of localfor an “immediately adjacent ALU” requires the noted adjacentorientation, but does not exclude other (non-conflicting rules) such asthe presence of operand selector switches and/or registers proximate tothe ALUs that provide various inputs within the local range.

A “compiler” is computer software operating in combination with hardwarethat transforms computer code written in one programming language (thesource language, usually person-readable) into another computer language(the target language, typically non-human readable). A compiler willtypically take program steps of a source program for execution andconvert the steps into a series of machine-level final instructions forALUs to execute. In the compiling process, the various program steps maybe reorganized and/or transformed into different related groups as thegroups are refined into instructions.

“Instruction operation” or “instruction operations” refers to anycollection of operations (including a collection of one) from a programin any state as it transitions from the initial program steps to thefinal program instructions to be executed by the ALUs.

“Instruction word” refers to a bundle of instructions operations to beexecuted by at least some of the ALUs in the data path at the same time,concurrently, in parallel, during a common clock cycle. As discussedbelow, each instruction operation of the instruction word is associatedwith a particular ALU that will perform that particular instructionoperation. An instruction word may be unpopulated (no instructions haveyet been associated), referred to as a “bubble.” Instruction words aredescribed herein in the singular, although it is to be understood thatan instruction word may be plural (e.g., two smaller instruction wordscan collectively be considered a single instruction word). If the chiphas different cores, there may be different instructions words for eachcore executed in parallel during the same clock cycle.

“Mapped instruction word” refers to a type of instruction word withmultiple slots in which each of the slots of the instruction wordcorresponds to a particular ALU. For multiple mapped instruction words,the slots collectively form columns corresponding to a particular ALU.Multiple instruction words thus define a map of instruction operationsto ALUs, in that each row represents the instruction operations to beexecuted in parallel during a clock cycle while the columns representthe assigned ALUs for those instructions that will be executed insequential fashion; the opposite could also be used (where each columnrepresents the instruction operations to be executed in parallel duringa clock cycle while the rows represent the assigned ALUs for thoseinstructions), although for ease of discussion the following descriptiononly further discusses the column=ALUs. Instruction words may have anydesirable number of slots, although preferably the number of slots isthe same as the number of ALUs in the data path.

When created, a mapped instruction word may be unpopulated, andthereafter some of the slots may be filed. As discussed below, theprocessor may assign instruction operations to particular ALUs forexecution by associating (e.g., inserting, linking) each instructionoperation to a particular slot/column of the instruction word. When theinstruction word is due to be executed, the entire row is read and theindividual instruction operations of the row are executed by thecorresponding ALUs. If any slot of an instruction word is unpopulated,then the ALU corresponding to that instruction slot does not receive anynew instruction for that clock cycle and will either remain idle orcontinue with a prior multiple-clock cycle process that it is engagedin. In the alternative, slots that do not receive an instructionoperation from the program could be assigned a dummy instructionoperation for the ALU to either remain idle or continue with a priormultiple-clock cycle process that it is engaged in.

“Logically direct connection,” “logically directly connected” and thelike refers to a connection over a pathway that lacks intervening logicthat would modify a signal passing over the connection. A non-limitingexample is a wire connecting two different points. Another example iswires in combination with traffic direction components, such as amultiplexer or an operand selection switch. A buffer may also be part ofa logically direct connection when it does not change the signal. Alogically direct connection may pass through another component (e.g., anALU) provided that the component does not exert a logic basedmodification on the signal.

“Normal operation” refers to operations that occur while the supportstructure and software is operating in an undamaged state under ambientconditions. Operations that occur while the structure and/or software isphysically or electrical damaged (e.g., a virus) or under externalduress conditions (e.g., excessive heat, cold, pressure, water exposure)are to be considered abnormal.

The embodiments herein are discussed with respect to components at roomtemperatures, and without any specific effort to reduce the temperature.However the invention is not so limited, and the embodiments could beimplemented in other temperature conditions.

Some embodiments herein are discussed with respect to processes and/orflowcharts. It should be understood that, for any process or flowchartdiscussed herein, there can be additional, fewer, or alternative steps,performed in similar or different orders, or in parallel, within thescope of the various embodiments, unless otherwise stated.

As discussed above, a paradigm of the prior art is to guarantee twoevents in a single clock cycle. First, an ALU will receive and select asinputs from whatever source within the data path that provides thoseinputs. Second, the ALU will perform a processing step on thereceived/selected input(s) where the processing step is known to takeone cycle or less to complete.

According to an embodiment of the invention, a new paradigm is providedin which the guarantee is limited to completing an act of localcommunication to a consumer ALU, and the consumer ALU performs itsassigned processing step. Thus there are two requirements to maintainthe guarantee. First, like the prior art the ALU will perform aprocessing step on the received/selected input(s) where the processingstep is known to take one cycle or less to complete. Second, an ALU willreceive and select as inputs from whatever local producer within thedata path provided them; unlike the prior art this paradigm does notrequire, and thus does not guarantee, that the ALU will receive andselect as inputs content that is non-local.

This paradigm is different than the prior art in that the prior artrequires that the clock speed allow the time needed for globalcommunication across the entire data path, while some embodiments hereinonly require that the clock speed allow for the time needed for localcommunication; since the time for local communication is smaller thanthe time for global communication, the overall clock speed is faster.When a particular instruction operation requires a global communication,then the corresponding instruction operation is delayed by one or moreclock cycles to allow for the global communication to be completed. Thisparadigm may be achieved in part by taking into account the location ofALUs assigned to specific steps, and performing related subsequent stepsin ALUs that are local.

The above may be demonstrated in a basic example of two instructionoperations for a processor 250 of FIGS. 2A and 2B to implement,hereinafter referred to as Instruction Set 1:

-   -   1: A=R1+R2    -   2: B=A+R3.

where

-   -   R1, R2 and R3 are registers that provide a particular value as        available within the data path.

To execute Instruction Set 1 under the methodology of the prior art,processor 250 would select any ALU in FIG. 2B it wants for the firstinstruction operation A, such as for example ALU 208. The prior artprocessor must then also select a second ALU to perform the secondinstruction operation B. In selecting the second ALU, the prior artprocessor does not take into account the location of ALU 208 where theprior instruction operation A was executed. This is in part because theprior art paradigm is based on the clock speed allowing for theselection of any ALU within the data path to perform the second step;the distance between the ALUs is irrelevant and ALU location of priorinstructions are thus not considered in selection of the second ALU. Theprior art processor could thus just as easily pick ALU 210 (close to ALU208) as ALU 214 (several ALUs distant). Similarly, the prior artprocessor does not leverage the dependent relationship betweeninstruction operations A and B, in that instruction operation B dependson the outcome of instruction operation A.

Per an embodiment of the invention, a processor will likewise select afirst ALU such as ALU 210 for instruction operation A. To assign thesecond ALU, the processor can take into account both the nature of thedependent relationship between instruction operations A and B and thelocation of the ALU where A is performed. Here, the processor recognizesthat (a) ALU 210 performed the first instruction operation A and thusalready has access to the outcome, and (b) that all of the informationneeded to execute instruction operation B is available locally to ALU210. That is, instruction operation B needs the result of instructionoperation A, which will be present on ALU 210 by virtue of completion ofthe first instruction operation A, and the value from register R3(B=A+R3), which is locally accessible from the registers 217. Theprocessor can thus assign one of the ALUs local to ALU 210 to performthe second instruction operation B.

As noted above, what is considered local is predefined. A non-limitingexample of local communication is an ALU to itself, such as shown inFIG. 3B. In the architecture of FIG. 2B the “most” proximate consumerALU to a producer ALU is itself, in that the shortest transmission pathfrom one ALU to the next is between the input and output of a singleALU. For example, if local is defined as an ALU to itself, then withinstruction operation A having been assigned to ALU 210, theninstruction operation B (as both dependent to instruction operation Aand executable locally), can also be assigned to ALU 210. Since thedistance between the input and output of ALU 210 is relatively short,the corresponding delay from time of transmission is minimal (comparedto global communication across the entire data path).

Another non-limiting example of a definition of local communication isany adjacent ALUs; for example under such a definition the ALU 210executing instruction operation A is within that local range of adjacentALUs 208 and 212. Communication by ALU 210 to ALU 208, 210 (i.e., toitself) or 212 would be local. Communication beyond one adjacent ALU(e.g., 204, 214) is considered global. If instruction operation A isassigned to ALU 210, then instruction operation B could thus be assignedto ALU 208, 210 or 212 under this definition of local. Instructionoperation B would thus be assigned to ALU 204, 206 or 214 under thisdefinition of local, as those ALUs are too far away from ALU 210 toguarantee that ALU 201 would receive their outputs and performinstruction operation B within a single clock cycle.

The definition of local also preferably includes the range to theoperand selection units and registers that provide the input to theALUs, such as 2255 and 2355 in FIGS. 22 and 23, described below.

In the above examples, the processor and corresponding methodologyapplied “location awareness” in the selection of the ALU for instructionoperation B, in that the processor knew the location of the producer ALUthat would execute the prior instruction operation A and used thatlocation as a factor in deciding the location of the consumer ALU thatwould perform the second instruction operation B. As discussed in moredetail below, the processor may actively seek to assign instructions toALUs to avoid non-local communication.

The above paradigm allows for a CPU to operate with significantly fasterclock speed than the prior art because the “worst case” time oftransmission is established by local communication rather than globalcommunication. The distance for local communication (e.g., between arange of two adjacent ALUs) is considerably smaller than the distancefor global communication from the extreme edges of ALUs in the datapath. Since the corresponding distance is so small, the correspondingtime of transmission for local communication is also quite smallcompared to the time of transmission for global communication.

By way of comparison, as discussed above in the prior art the clockcycle may be defined by the following equation:

Minimum clock cycle time=tmaxglobalcomm+tmaxop+toh

In an embodiment of the invention, the clock cycle would be defined by:

Minimum clock cycle time=tmaxlocal+tmaxop+toh

where

-   -   tmaxlocal is the maximum amount of time for an ALU to receive        and select inputs from a local producer;    -   tmaxop (as discussed above) is the maximum amount of time that        one ALU would take to complete a step within a single clock        cycle; and    -   toh (as discussed above) is the time allocated to “overhead”        parameters as are known in the art, including but not limited to        one or more of clock skew and clock jitter, variation of        process, temperature or voltage, ground bounce, simultaneous        switching, signal integrity, Miller effect, guard band and/or        aging.

As discussed above, non-limiting examples of tmaxglobalcomm, tmaxop, tohare 120 ps, 120 ps, and 20 ps, with a corresponding clock cycle of 260ps and a minimum clock speed of 3.85 Ghz. For that same example andcircuit conditions, an approximate value of local communication (wherelocal is defined by an adjacent ALU) may be tmaxlocal=20 ps. Thecorresponding clock cycle time and clock speed art between the prior artand the instant embodiment is thus:

TABLE 1 Prior Art Instant embodiment Minimum clock tmaxglobalcomm +tmaxlocal + cycle time tmaxop + toh tmaxop + toh 260 ps = 120 + 160 ps =20 + 120 + 20 120 + 20 Maximum clock speed 1/260 ps 1/160 ps 3.85 Ghz6.25 Ghz

The clock speed of the instant embodiment through the application oflocal communication is thus some 60% faster than the prior art. This isbecause the prior art speed is based on tmaxglobalcomm whereas in theabove embodiment speed is based on tmaxlocal wheretmaxlocal<<tmaxglobalcomm.

Even greater improvements are potentially available, via scaling inimprovement of clock speed with faster transistors. As discussed above,in the prior art, further improvements in transistor speed yield littleimprovement in clock speed because time of processing became anegligible factor compared to tmaxglobalcomm, but this is not the casewith some embodiments herein due to the reliance on the much smallertmaxlocal. For example, applying the above equations with a potentialfuture doubling of transistor speed (tmaxop=60 s) and keeping otherfactors stable for sake of example, the clock speeds are as follows:

TABLE 2 Prior Art Instant embodiment Minimum clock tmaxglobalcomm +tmaxlocal + cycle time tmaxop + toh tmaxop + toh 200 ps = 120 + 100 ps =20 + 60 + 20 60 + 20 Maximum clock 5 Ghz 10 Ghz speed

In the above example, the prior art paradigm only saw about 1.25 Ghz(+30%) improvement in clock speed from Table 1 to Table 2 in response tothe doubling of the transistor speed. In contrast, the paradigm of theinstant embodiment set forth herein saw a 3.75 Ghz improvement (+60%) inclock speed from Table 1 to Table 2. Overall, the clock speed of theinstant embodiment in this example would be twice that of the prior artparadigm.

A representation of a processor chip 400 which can practice theparadigms discussed herein is shown in FIG. 4. Processor chip 400includes one more cores 402, each core having a data path 404 withmultiple ALUs 406. Compiler functionality is provided by a compiler assoftware resident on appropriate hardware as is known in the art, andrepresented in FIG. 4 as compiler 408 running on processor chip 400. Ascheduler 410 will implement the compiled instructions on the ALUs.Processor 400 has a clock cycle and corresponding clock speed consistentwith that described above, in that it guarantees local communication butnot global communication. The invention is not limited to thisparticular chip layout, and other layouts could be used, and the variousoperations distributed as appropriate within those layouts.

As discussed above, the improved clock speeds are based on the guaranteethat an ALU will receive and select as inputs from whatever localproducer provided them. However, inevitably not every instruction can beperformed locally, in that for whatever reason a particular consumer ALUneeds a result from a non-local producer. A single clock cycle as setfor local communication does not provide enough time to guarantee thatthe input from a non-local producer will arrive at the consumer ALU intime to allow for processing.

Some embodiments of the instant invention may compensate for this bydelaying processing by the consumer ALU for as a many clock cycles asneeded until the input has enough time to reach the consumer ALU. Thus,where the prior art processor used a single clock cycle for the globalcommunication and the processing, a processor of the instant embodimentuses multiple separate clock cycles—at least one for the non-localcommunication and at least one for the processing once the inputs arereceived.

This can be illustrated with respect to Instruction Set 2, whichincludes five instruction operations:

-   -   1: A=R1+R2    -   2: B=A+R3    -   3: D=R5+R6    -   4: E=D+R7    -   5: F=B+E

In the foregoing example, instruction operations A and B are in adependent relationship, and each can be performed at a local level(e.g., by ALU 208 alone if that was the definition of local), within asingle clock cycle. Instruction operations D and E are also in adependent relationship, and each can be performed locally at a differentALU, (e.g. ALU 214). Thus four of the five instructions of InstructionSet 2 can be performed within local ALUs, all within a range of localcommunication.

This is not the case for instruction operation F. Since instructionoperation F is dependent upon the outcomes of instruction operations Band E, in theory instruction operation F could be processed locallywhere A−B occurs, locally where D−E occurs, or at a new ALU entirely(e.g., ALU 212). However, execution of instruction operations B and Eoccur at ALUs too far apart to guarantee that the result of bothinstruction operations B and E could reach the corresponding ALUassigned to instruction operation F to process instruction operation Fwithin the same clock cycle.

For example, if instruction operation F were performed in the samelocality as instruction operations A−B (ALU 208), then the result ofinstruction operation B is locally available, but the result ofinstruction operation E (from ALU 214) is not. Execution of instructionoperation F thus requires a non-local communication. As discussed above,the clock cycle is not long enough to guarantee non-local communication,in that the clock cycle is not long enough to guarantee that the resultof instruction operation E will reach ALU 208 from ALU 214 in time to beprocessed.

To account for this need for an instance of non-local communication,processer 400 may insert an additional instruction into Instruction Set2, which is a delay instruction in which the execution of instructionoperation F is delayed by one clock cycle. The processor will thusassign the ALUs as a schedule of six instruction operations, rather thanfive:

1: A=R1+R2

2: B=A+R3

3: D=R5+R6

4: E=D+R7

5: WAIT (bubble)

6: F=B+E

The addition of the inserted instruction operation provides anadditional clock cycle of time for the result of instruction operationsE and/or B to travel globally to reach a destination ALU. For example,using the metrics as discussed above with respect to Tables 1, themaximum time needed to get from one ALU to another in the data path isabout 120 ps. A single clock cycle of the processor is 160 ps. Since theclock cycle of 160 ps is more than the maximum travel time of 120 ps,waiting to execute instruction operation F by one clock cycle willguarantee that the results of instruction operations E and B will haveenough time to reach the consuming ALU to process instruction operationF. If for some reason it was not enough time (e.g., the maximum traveltime was longer than the clock cycle), then an additional delay step(s)could be inserted until enough time was provided.

Despite the additional clock cycle, the entire process occurs fasterthan the prior art. In the prior art processor using the metricsdiscussed above in Table 1, the above five steps 1-5 would be executedon 3.85 Ghz processor at 260 ps per step, for a total of 1300 ps toexecute the five instruction operations. In the processor of the aboveembodiment, the six instruction operations (five of the original plusone delay step) would be executed on 6.25 Ghz processor at 160 ps perstep, for a total of 960 ps. The processor of the instant embodimentexecutes the overall instruction operation set A−F at higher clock speed(+62%) and in less time (−26%) than the prior art paradigm.

As seen in the above examples, the higher clock speed is at least inpart offset by the increase in the number of steps to account fornon-local communication. Applicants estimate that by using prior art ALUarchitectures some 85+% of instruction operations can be conductedlocally (based on what the specific definition of local is). Assumingworst case of one delay needed for every six substantive instructionsoperations (i.e., 83% local, 17% global), processor 400 would still havea higher clock speed (+65%) and execute the same instruction operationset in less time (−30%) than the prior art paradigm. Other embodimentsas discussed herein below may further improve on this. The overallresult is processor with a faster clock speed and faster performance ofthe instruction operations.

Factors that affect the balance of what operations can be performedlocally as opposed to those that require non-local transmission of datainclude the scope of local as opposed to the percentage of global.Specifically, the smaller the local range is, the smaller the time oftransmission and thus the faster the clock speed. However, a smallerrange of local processing may increase the percentage/number of globalsteps because less steps can meet that tighter definition for localprocessing.

For example, setting locality to just an ALU itself (e.g., FIG. 3B) is ashorter distance than an adjacent ALU; this minimizes the time oftransmission and correspondingly maximizes clock speed such thatapproximately 90% of instructions could be executed as local under thisdefinition using prior art ALUs. In another example, setting locality toadjacent ALUs (e.g., 302 or 304) has a longer time of transmissioncompared to the ALU-to-itself and thus the time of transmission ishigher and clock speed is slightly lower. However, Applicants expectthat approximately 93% of instructions could be executed as local underthis definition using prior art ALUs and require less delays for globalcommunication.

Various embodiments herein can further improve on the above. One suchembodiment, disclosed in more detail below, is to collect andsimultaneously execute instruction operations that can be performed inparallel, thus reducing the number of clock cycles needed to execute theinstruction set. For example, Instruction Set 1 above has twoinstruction operations, but they can be performed in parallel in oneclock cycle.

Another such embodiment is to utilize ALUs with different configurationsand/or layouts. Specifically, as shown in FIG. 5A, an ALU configurationhas the input and output on opposing sides of the ALUs, such as ALUs 502and 504, connected by a pathway 506. If local is defined as being anadjacent ALU, then the time of transmission is dictated by the longestpathway for the data to travel, in this case the output of 504 back to502 along pathway 506.

FIG. 5B shows an embodiment of an ALU configuration referred to hereinas “mirrored” ALUs. In this configuration each of ALUs 508 and 510 haveboth input and output on the same side, both connected to pathway 512.Further, the ALUs 508 and 510 are paired with one flipped relative tothe other, such that the I/O connections face each other with anintervening pathway 514, and may directly connect to each other. Iflocal is defined by an adjacent ALU, then the time of transmission isdictated by the longest path, in this case the output of 508 back to 510along pathway 514. Thus both FIGS. 5A and 5B have the same definition oflocal (i.e. an adjacent ALU) but since pathway 514 in FIG. 5B is shorterthan pathway 506 in FIG. 5A, the time of transmission is lower for FIG.5B and can support a correspondingly higher clock speed.

Defining local as a mirrored ALU pair such as in FIG. 5B combinesadvantages of an adjacent ALU pair (which may reduce the number ofglobal instructions compared to a ALU-by-itself) with distances that areeven shorter than ALU-by-itself (the distance between ALUs 508 and 510potentially being even shorter than the output to input path shown inFIG. 3B for ALU 214).

FIG. 6 shows a core 600 of processor chip 400 with two pairs of mirroredALUs 602-604 and 614-616. In this embodiment, local could be defined asmirrored pairs, i.e., 602-604 are local to each other and 612-614 arelocal to each other. Pathway 618 allows for global ALU communications,locally provided values (e.g., via operand selection units andregisters), and other data and commands as needed.

Applying Instruction Set 1 (A=R1+R2, B=A+R3) to the configuration ofFIG. 6 with local defined as a mirrored ALU pair, processor 400 undercertain conditions could assign instruction operation A to ALU 602, andseeking to keep instruction operation B within local range it wouldassign instruction operation B to ALU 604, but not to 612 and 614 asthese ALUs are outside of the range of local with respect to ALU 602.

Assignment of ALUs via location awareness may be implemented by acompiler 408 of the processor chip 400. The compiler 408 may be astandard compiler modified with specific programming to perform themapping of steps to ALUs, or may be custom designed. For brevity, theembodiments below are described with respect to various operationsperformed by processor chip 400, although it is to be understood thatthe invention is not so limited.

During the above, the compiler 408 generates a dependency graph of nodescorresponding to instruction operation based on the dependencies of theoperations that ultimately will form the end set of instructions. FIG.7A shows a dependency graph for Instruction Set 1, in which node is oneinstruction operation. Instruction operation A=R1+R2 may be thought ofas “independent” because it does not rely upon the outcome of any prioroperations (R1 and R2 are locally present from the registers).Instruction operation B=A+R3 is “dependent” because it relies upon theoutcome of A.

As is known in the art, compilers will attempt to reduce the number ofinstruction operations to be performed by applying underlying rules andexamining a resulting score under those rules. The process is iterative,and can execute over 100 passes attempting to optimize the allocation ofsteps within the dependency graph. The dependency graph may thuscontinue to change over these passes. At some point, the compiler willmap the nodes on the graph to specific ALUs for execution; this mayoccur at least twice, once before the registers are assigned and onceafter the registers are assigned.

An embodiment of the invention may utilize at least some of the rulesthat are applied by prior art compilers. The embodiment would also applyspecific rules for ALU selection based on location awareness.Non-limiting examples of such rules are that each operation is performedlocally when possible to avoid non-local communication, and the numberof non-local communications should be minimized.

Once the dependency graph of the compiler reaches a particular state ofevolution, the system will begin assignment of ALUs to nodes within thedependency graph into instruction words. Each instruction wordexplicitly specifies instructions to assign to the individual ALUs toexecute at the same time, concurrently, in parallel, during a commonclock cycle. Unlike VLIW words, the instruction word of the instantembodiment can include some instruction operations with directindependencies. Depending upon circumstances at least one level ofinterdependency of certain instruction operations can be accommodated,and potentially two or more if the ALUs are designed to handle that manyinputs.

FIG. 10A shows an embodiment of an instruction word 1002 as a mappedinstruction word of a row with slots within columns 1004, 1006, 1008,and 1010 for which the slots are associated with specific ALUs; thenumber of slots may be the same as the number of ALUs within data path404, but this need not be the case as discussed below.

FIG. 10B shows multiple sequential instruction words 1002A-1002 n, forwhich the slots form columns, and for which when populated byinstruction operations the instruction words 1002A-n collectively definea map of instruction operations. Each row represents the instructionoperations that will be executed concurrently by the ALUs in acorresponding clock cycle. Each column of slots is specific to aparticular ALU within the data path, and thus the column represents thesequence by which that ALU will perform instruction operations. Forexample, with respect to the four ALU data path configuration of FIG. 6,ALU 602 could be assigned to column 1004, ALU 604 could be assigned toALU 1006, ALU 612 could be assigned to column 1008, and ALU 614 could beassigned to ALU 1010. Thus, assignment of instruction operations to anALU could encompass entering that instruction operation into theappropriate column/slot as dedicated to that ALU. However, the inventionis not so limited, and columns/slot may not be allocated to specificALUs, with instead the content of the slot having an identifier to theparticular ALU.

As discussed in more detail below, processor 400 will work through adependency graph to assign each of the instruction operations to aparticular ALU 406 within processor chip 400 for execution. Theprocesses identifies a subset of instruction operations, including insome case directly dependent instruction operations, that can beperformed in parallel by the ALUs during the same clock cycle and assignthem to those ALUs.

Referring now to FIG. 8, an embodiment of a methodology for assigningALUs through location awareness is shown in connection with a flowchart800. The flowchart can be applied to any program, for any data path of acore within a particular processor 400 with an ALU layout for whichlocal communication is defined. The steps of the flowchart arepreferably carried out by the compiler 408 running on the processor 400,but as other components of the processor 400 may be involved in theprocess, the discussion herein will attribute the functionalitygenerally to processor 400.

At block 802, the processor 400 preliminarily designates the individualinstruction operations of the dependency graph as global or local, basedon whether or not the nature of the operation performed at the node canbe completed locally or requires a global communication (per thedefinition of local). For example, an instructions node that is based oninputs from local registers only is likely local because registercontent is locally available. An instruction node that is based oninputs from two different local or global instruction nodes will likelybe global. An instruction node that is based on one input from a localor global instruction nodes either alone or in combination with registerinputs will likely be local.

In some cases the graph will not be able to predict whether theinstruction operation of a particular node will be global or local. Thismay occur for example at the boundaries of the dependency graph where itis unclear what the preceding step might be (e.g., the preceding stepmight be part of another program that is not even entered in the systemyet). In such cases, since the processor 400 does not know what occurspast the boundary, the compiler may consider such operations to be localand allow subsequent processing to make adjustments as necessary. In thealternative, the compiler may consider such operations to be global andallow subsequent processing to make adjustments as necessary.

The efforts at block 802 to assess local and global need not be entirelyaccurate. As discussed below, errors in assignments may be correctedand/or compensated for in subsequent processing. The designation oflocal and global at block 802 may therefore be considered preliminary.

After the designation of local/global nodes, processor 400 will at block803 begin with a new instruction word 1002, preferably in mappedinstruction format. This may entail creating a new instruction word (tofollow any prior instruction words), or identifying a previously createdinstruction word. In an alternative embodiment, in which instructionoperations are collected rather than mapped, block 803 may beunnecessary.

At block 804 the processor 400 selects a node from the remaining portionof the dependency graph for assignment, where the remaining portionexcludes assignment consideration for any previously assigned nodes.(For the initially selected node the entire graph is present, as nothinghas yet been assigned.) The selected node may be the lowest node on theremaining critical path (i.e., the path within the dependency graph withthe longest number of steps between beginning and completion) that doesnot violate a rule.

FIG. 9 shows a flowchart of a non-limiting methodology by which block804 may be executed. At block 902, processor 400 identifies the criticalpath of the distribution graph; since each node may include multiplesteps, the critical path may be different than defined by the longestnumber of nodes. At block 904, processor 400 identifies the lowest nodeof the critical path identified at block 902. At block 906 processer 400determines whether selection of the instruction operation of theidentified node would violate any rule, e.g., if the inclusion of theinstruction operation in the particular instruction word would create asituation in which the guarantee of local communication and processingcould not be maintained. If no rule is violated then at block 908processor 400 selects that node for assignment and control passes toblock 806 in FIG. 8.

If inclusion of the instruction operation would violate a rule at block906, then at block 910 processor 400 identifies the next most criticalpath and returns control to block 904. This process may continueiteratively until a node is selected. Ultimately if no node meets thecriteria (e.g., all nodes exhausted, some nodes remain but enough nodeshave been considered that further searching would be consideredcounterproductive or futile), then control will pass to block 816 tobeing the process to transition to a new instruction word (discussedbelow).

At block 806 processor 400 selects an ALU for the instruction operationof the assigned node and associates the instruction operation with aslot of the instruction word 1002. Various rules may define which ALUand/or slot to select. For example, an ALU that is already in use isunavailable and should not be assigned. Processor 400 may not want touse an ALU that is local to an ALU already in use to avoid potentialconflict in allocation of local resources unless it makes sense to doso.

As discussed above, when in a mapped instruction word, format slots ofthe instruction word 1002 may be dedicated to certain ALUs, and thus theinstruction operation-ALU association may be defined by inserting theinstruction operation into the appropriate slot of instruction word 1002for the selected ALU. However, the invention is not so limited, in thatthere are other ways to create the association that may or may notinvolve use of mapped instruction words. By way of non-limiting example,a marker could be inserted into the instruction word pointing toward theinstruction operation as stored elsewhere. By way of another nonlimiting example, the instruction operation could be inserted into theinstruction word along with a marker to the selected ALU. The inventionis not limited to the form of the association or the collection of theinstruction operations into the instruction word.

At block 808, processor 400 identifies any nodes dependent upon thepreviously assigned node that can be included in the same instructionword 1002 for parallel execution. The following non-limiting rules mayapply to whether a particular dependent node may be included in the sameinstruction word 1002 as the nodes from which it depends. For example,one rule may be that the dependent node is local (per block 804).Another rule may be that the instruction operations of the dependentnode and the node from which it depends are simple/fast enough that bothcan be completed within a single clock cycle. Another rule may be thatthe level of dependency does not exceed what the ALUs can handle (e.g.,one level of dependency when ALUs can only process two inputs). Anotherrule may be that the instruction word 1002 has room for the dependentnode (i.e., the instruction word is not already full). Another rule maybe that a local ALU is available. The invention is not limited to therules that may be applied.

If such a rule complaint node is identified, then control passes toblock 810. If no such node is identified, then control passes to block812.

At block 810, processor 400 assigns any identified dependent nodeinstruction operation from block 808 with an ALU and the instructionword 1002. For a mapped instruction word, the ALU assignment may beinserting the identified instruction operation into a slot of theinstruction word that corresponds to the ALU that is local relative toALU of the producer node upon which the dependent node is dependent.Other forms of assignment may be used as discussed herein.

At block 812, processor 400 updates the dependency graph to removeassigned nodes from further consideration in node selection (at leastfrom a critical path perspective), this may be a deletion from thedependency graph itself, or a marker over the node that the node shouldno longer be considered. The invention is not limited to the manner inwhich the methodology removes assigned nodes from further assignmentconsideration.

At block 814, processor 400 determines whether the instruction word 1002is complete and should be closed. Non-limiting examples of reasonsinstruction word 1002 may be considered complete are when theinstruction word is full (there are no more available slots), there areno instruction operations left to place (the dependency graph has beencompletely converted to instruction words), and/or there are slotsavailable in instructions word 1002 but none of the remaininginstruction operations can fit therein because its inclusion in theinstruction word 1002 would violate a rule.

If the instruction word 1002 is complete, then at block 816 processor400 sets a flag in the last instruction operation in the instructionword 1002 to indicate the end of instruction word 1002. Control passesto block 818 to check whether to begin a new instruction word 1002 forany remaining unassigned instructions operations. If so, control returnsto block 803 to begin a new instruction word 1002. If not, the ALUassignment process ends.

Examples of application of the above flowchart will now be discussed.

Example 1

In example 1, the prior art ALU configuration of FIG. 2B is used, andthe definition of local is an ALU to itself (as shown in FIG. 3B). SixALUs are present in FIG. 2B, and as shown in FIG. 11A each instructionword 1102 in mapped instruction word format includes six slots,specifically assigned to each of the ALUs 204-214. Instruction Set 1 isthe program to be assigned to ALUs with the instruction operationsA=R1+R2 and B=A+R3. As discussed above, the distribution graph ofInstruction Set 1 is in FIG. 7A; in this graph example, each of theinstruction operations of Instruction Set 1 occupies a single node,although it is to be understood that as this may not be the case, for asnodes are compiled, several instruction operations may occur within asingle node, or several instructions operations may be complied intoother instruction operations for the node. In this context, aninstruction operation is assigned to a node, and instruction operationand node can be used somewhat interchangeably.

In the graph of FIG. 7A there are no global operations, and as such, atblock 802 processor 400 designates each node as local. At block 892processor 400 begins a new instruction word, in this case word 1102A. Atblock 804 and 806, processor 400 identifies A=R1+R2 as the critical pathand inclusion of instruction operation A in instruction word 1102A doesnot (in this case) violate any rule; processor thus assigns instructionoperation A to an ALU slot (e.g., ALU 208 for this example) ininstruction word 1102A as shown in FIG. 11A.

At blocks 808 and 810, processor 400 identifies instruction operation Bas dependent upon instruction operation A (B=A+R3), local to A, and theinstruction word is not full (there are still three slots left).However, as locality in this definition is an ALU local to itself,instruction operation B cannot be assigned to another ALU in the sameinstruction word 1102A because the ALU for instruction operation A isalready in use, i.e., there is no local ALU available in instructionword 1102A, for which to assign instruction operation B.

Since no other dependent node is available to populate instruction word1102A, control passes to block 812, where processor 400 updates thedependency graph to remove node A from further assignment considerationas shown in FIG. 7B.

At block 814, the instruction word 1102A is considered complete. Eventhough slots remain for unassigned ALUs in instruction word 1102A,inclusion of the remaining node B would be a rule violation. A flag isthus set at block 814 to designate the slot for ALU 208 as the end ofinstruction word 1102A, a new word is needed and created at 803 asinstruction word 1102B in FIG. 11B, and control returns to block 804.

At blocks 804 and 806, compiler identifies B=A+R3 as the next criticalpath in the dependency graph (it is all that is left), and instructionoperation B does not (in this case) violate any rule that would precludeinclusion in instruction word 1102B. Since instruction operation B islocal to instruction operation A, processor 400 assigns instructionoperation B to an ALU that is local to the ALU to which instructionoperation A was assigned. In this case by the definition of locality(ALU to itself) ALU 208 would be used as it was the same ALU 208 for thepredecessor instruction (i.e. operation A) as shown in FIG. 11B. (If forany reason ALU 208 was not available, then instruction operation B couldnot be placed in instruction word 1102B because the other ALUs are notlocal and a global communication would be needed, and a new instructionword 1102C (not shown) would need to be created.)

No further dependent nodes are selected or assigned at blocks 808 and810 (none remain), the word is determined as full at block 812 (allnodes assigned), the flag is set at block 814 to designate the slot forALU 208 as the end of instruction word 1102B, the process is determinedas complete and 816 and the process ends.

In the above example, the format of the instruction word as a mappedinstruction word identifies the instruction operation-ALU associationdirectly via the slot assignment. However, the invention is not solimited. FIG. 11C shows a non-limiting example of another representationof the populated instruction words 1102A/B that contains ALU IDs withinthe slots.

FIG. 11D shows a non-limiting example of another representation of thepopulated instruction words 1102A/B, which are not in mapped instructionformat and for which instruction operation-ALU association isself-contained in a data field.

FIG. 11E shows a non-limiting example of another representation of thepopulated instruction words 1102A/B, which are not in mapped instructionformat and for which instruction operation-ALU association is containedin a data field by the ALU ID and link L to where instruction operationsA and B can be retrieved.

In this example, the particular combination of the ALU configuration andthe instruction set did not result in any savings in the number ofinstructions that needed to be executed. Nonetheless, if the processoris using a clock speed defined by tmaxlocal then the process executed atthe faster clock speed, as discussed above.

Example 2

Example 2 uses the same Instruction Set 1 as in Example 1. In this case,the ALU configuration of FIG. 6 is used, and the definition of local ispredefined as communication to a partner in a mirror pair (e.g., ALU 602and 604 are local to each other as a mirrored pair and ALUs 614 and 616are local to each other as a mirrored pair, but ALUs 602 and 614/616 arenot local because while adjacent they are not mirrored). Since there arefour ALUs (602, 604, 614, 616), each instruction word 1202 having amapped instruction word format as shown in FIGS. 12A-12B will have fourslots. Also since the ALU configuration of FIG. 6 has 4 ALUs in itsentire data path and the definition of local is a mirrored pair, thelocally predefined range is smaller than the data path.

As discussed above, the distribution graph of Instruction Set 1 is inFIG. 7A. There are no global operations, and as such at block 802 theprocessor 400 designates each node as local. At block 803, processorbegins a new instruction word 1202A as shown in FIG. 12A. At blocks 804and 806, processor 400 identifies A=R1+R2 as the critical path andinstruction operation A does not (in this case) violate any rule;processor 400 thus assigns instruction operation A to an ALU slot (e.g.,ALU 602 in this example) in instruction word 1202A.

At block 808, processor 400 identifies instruction operation B asdependent upon instruction operation A, local to A, the instruction word1202A is not full (there are still three slots left), and bothinstruction operations A and B are simple instructions that can besequentially executed in the same clock cycle. In this example, becauselocal is defined a mirrored pair, since ALU 602 is assigned instructionoperation A then a local ALU is available—ALU 604 (not currently inuse)—to receive instruction operation B as a qualified dependent node.At block 810, processor 400 assigns B to the slot for ALU 604 ininstruction word 1202A as shown in FIG. 12B.

As discussed above, prior art VLIW could not populate instruction word1202A as shown in FIG. 12B, because VLIW prohibits interdependencies inthe same instruction word, and since B is dependent upon A, VLIW couldnot include A and B in the same word. The embodiment of this exampleimproves over VLIW in that it allows inclusion of both A and B and thuswill experience a corresponding reduction in total processing time.

As there are no other nodes to assign, the instruction word 1202A isconsidered full at block 814, the instruction word full flag is set atblock 816, the graph is considered complete at block 818, and theassignment process terminates.

As noted above with respect to FIGS. 11C-E, other storage/instructionword formats could be used, for which non-limiting examples are shown inFIGS. 12C and 12D.

In this example, the particular combination of the ALU configuration,the definition of local, and the instruction set result in a reductionin the number of clock cycles needed, in that two dependent instructionoperations could be executed in a single clock cycle as part of a singleinstruction word. In addition, if the processor is using a clock speeddefined by tmaxlocal then the process occurred at the faster processorspeed, as discussed above.

Example 3

The environment of Example 3 is the same as Example 2 (the ALUconfiguration of FIG. 6 is used, and the definition of local ispredefined as communication to a partner in a mirror pair, and furtherpresuming that the ALUs can handle complex operations). The InstructionSet 3 is as follows:

-   -   A=R1*R2    -   B=A+R3

Instruction Set 3 is similar to Instruction Set 1, save that instructionoperation A is an act of multiplication rather than addition.Multiplication takes longer than addition, and in this examplerepresents an instruction operation for which the total time formultiplication for instruction operation A and addition for instructionoperation B is too long to be completed in the same clock cycle.

The distribution graph of Instruction Set 3 is in FIG. 7C. There are noglobal operations, as all inputs are locally available, and as such atblock 802, processor 400 designates each node as local. At block 803,new instruction word 1302A is begun. At blocks 804 and 806, compileridentifies A=R1*R2 as the critical path and instruction operation A doesnot (in this case) does not violate any rule; processor thus assignsinstruction operation A to an ALU slot (e.g., ALU 602 in this example)in instruction word 1302A in FIG. 13A.

At block 808, processor 400 identifies instruction operation B asdependent upon instruction operation A, local to A, the instruction wordis not full (there are still three slots left). However, because bothinstruction operations A and B cannot be executed in a single clockcycle (the time needed for the multiplication of A and the addition of Bis too long to complete in one clock cycle), B cannot be included in thesame instruction word 1302A as this would violate a rule (there isn'tenough time in the clock cycle to guarantee completion of bothinstruction operations A and B).

Since no other dependent node is available to populate instruction word1302A, control passes to block 812, where processor 400 updates thegraph to remove node A from further assignment consideration.

At block 814, the instruction word 1302A is considered complete. Eventhough slots remain for unassigned ALUs in instruction word 1302A,inclusion of the remaining instruction operation B would be a ruleviolation. An end of word flag is thus set at block 816, a new word1302B is needed and created at block 803, and control returns to block804.

At blocks 804 and 806, compiler identifies instruction operation B=A+R3as the next critical path (it is all that is left), and B does not (inthis case) violate any rule. Since instruction operation B is local toinstruction operation A, processor 400 assigns instruction operation Bto an ALU that is local to the ALU that is assigned to instructionoperation A. In this example, because local is defined a mirrored pair,when ALU 602 is assigned instruction operation A, then a local ALU isavailable—ALU 604 (not currently in use)—to receive instructionoperation B as a qualified dependent node as shown in FIG. 13B.

No further dependent nodes are selected or assigned at blocks 808 and810 (none remain), the word is determined as full at block 812 (allnodes assigned), the flag is set at block 814 to designate the lastoccupied slot as the end of word 1202B, the process is determined ascomplete at block 816 and the process ends.

As with other examples, other formats for storage instruction word couldbe used such as shown in previously discussed FIGS. 11C-E.

Example 4

Example 4 uses the ALU configuration of FIG. 6, and the definition oflocal is predefined as a mirrored pair (e.g., ALU 602 and 604 are localto each other as a mirrored pair and ALUs 614 and 616 are local to eachother as a mirrored pair, but ALUs 602 and 614/616 are not local becausewhile adjacent they are not mirrored). Since there are four ALUs in thedata path 618, each instruction word will have four slots. In thisexample Instruction Set 4 is:

-   -   A=R1+R2    -   B=R3+R4    -   C=A+B

The distribution graph of Instruction Set 4 is in FIG. 7D.

Beginning with block 802, processor 400 designates instructionoperations A=R1+R2 and B=R3+R4 as local operations because both can beperformed based on local register content (R1, R2, R3, R4). Note thedesignation of instruction operations A and B as local does not meanthat they are local to each other; to the contrary, as discussed below,the ALUs that perform A and B may be beyond local range.

The instruction operation C=A+B would be designated as global, becausethe ALUs that would execute instruction operations A and B are notlikely to be local to each other and thus a global communication wouldbe needed, which cannot be completed in one clock cycle.

With the nodes designated as local/global, processor at block 803 beginsa new instruction word 1402A in FIG. 14A, and at block 804 selects anode for assignment to an ALU in instruction word 1402A. By way ofnon-limiting example, if the nodes in FIG. 7D are each one step, then atblock 902 instruction operations A=R1+R2 and B=R3+R4 are both identifiedas of equal critical path length as they have the same number of steps;instruction operation A can be chosen for convenience. At block 904,inclusion of instruction operation A in instruction word 1402A isdetermined not to violate any rule. Thus, at block 908 node A isselected for assignment and control passes to block 806. At block 806 anALU is selected for node A and placed into instruction word 1402A. Inthis case instruction operation A is independent and of firstassignment, and as such, processor can effectively choose any ALU, e.g.,ALU 602 as shown in FIG. 14A.

At block 808, processor 400 identifies instruction operation C as adependent upon instruction operation A. However, since instructionoperation C has been designated global, it cannot be included in thesame instruction word as the instruction operation on which it depends.No other dependent nodes are present, and control thus passes to block812.

At block 812, processor 400 updates the dependency graph to remove theassigned node A from further assignment consideration. At block 814,processor 400 determines that instruction word 1402A is not yet completebecause it has two spaces remaining, and there are still nodes to addthat would not violate any rule for the current instruction word 1402A.Control thus returns to block 804 for consideration of the remainingportion of the dependency graph.

Per block 902, processor 400 seeks out the node along the longestremaining critical path, which in this example is instruction operationB=R3+R4 as resident on the corresponding node. Instruction operation Bdoes not violate any rule at 904, and can thus be assigned to thecurrent instruction word 1402A.

At block 806, the instruction operation of node B is assigned to an ALU.Since instruction operation B is in an independent node, processor 400may assign it to any ALU that is not already in use, and may avoid anyALU in a local relationship with an ALU in use. Thus ALU 602 isunavailable due to prior assignment in the instruction word 1402, andprocessor 400 may prefer to avoid ALU 604, as it is part of an existinglocal relationship with in-use ALU 602. In this example, processor 400assigns instruction operation B to ALU 614 in a corresponding slot ofword 1402A as shown in FIG. 14B.

Control then passes to block 808 to look for dependent nodes from nodeB. Processor 400 identifies node C as dependent upon node B. However,since node C is global and the corresponding instruction operationcannot be included in the same instruction word as the node upon whichit depends, control passes to block 812.

At block 812 the dependency graph is updated to remove the assigned nodeB from further consideration.

Control then passes to block 814 to see if the instruction word 1402A iscomplete. In this case, the instruction word 1402A is complete becausethe only remaining instruction operation C=A+B cannot be included forthe reason discussed above. Control at block 816 thus sets the flag toindicate the word is full. At block 818, a new word is needed, andcontrol returns to block 803, to begin a new instruction word 1402B.

At block 804, the critical path is node C as the sole remaining node,but it is not selected because inclusion of instruction operation C ininstruction word 1402B would violate a rule. Specifically, node C isglobal, and thus must wait at least one clock cycle from the last resultof instruction operations A and/or B to allow time for globalcommunication. At block 804, processor 400 will thus seek another nodeon the next least critical path; since no such node exists (node C isthe last node), no node is assigned at block 806. Similarly, no node isassigned at block 808, no dependent node is assigned at block 810, thegraph is updated (no change), the instruction word 1402B is determinedfull at block 814 (no further nodes to enter), the flag is set toindicate the complete word at block 816, the next instruction word 1402Cis generated at block 803, and control returns to block 804 for the nextnode assignment.

At block 804, the critical path is node C as the sole remaining node,but this time it does not violate any rule, because interveninginstruction word 1402B was added to account for the globalcommunication; as each instruction word occurs over a single clockcycle, this additional instruction word 1402B delays execution ofinstruction operation C by one clock cycle to give enough time for theresults of instruction operations A and/or B to reach and be selected bythe ALU that will be assigned to instruction operation C. At block 806,instruction operation C is assigned to an ALU and inserted intoinstruction word 1402C. Under these circumstances, virtually any ALU canbe used for instruction operation C because none are in use (or will be)and there is no need/benefit from local communication. For convenience,ALU 604 can be selected, since it is the local of ALU 602 that generatedoutput from instruction operation A from which instruction operation Cdepends and placed in a slot corresponding to ALU 604, although thisneed not be the case.

No dependent nodes are selected or assigned at blocks 808 and 810 (noneremain), the instruction word 1402C is determined as full at block 812(all nodes assigned), the flag is set at block 814 to designate the lastslot of word 1402C as the end of word, the process is determined ascomplete at block 816 and the process ends.

As with other examples, other formats for storage instruction word couldbe used such as shown in FIGS. 11C-E.

Example 5

Example 5 uses the ALU configuration of FIG. 6, and the definition oflocal is predefined as a mirror pair (e.g., ALU 602 and 604 are local toeach other as a mirrored pair and ALUs 614 and 616 are local to eachother as a mirrored pair, but ALUs 602 and 614/616 are not local becausewhile adjacent they are not mirrored). Since there are four ALUs, eachinstruction word will have four slots. In this example Instruction Set 5is:

-   -   1: A=R1+R2    -   2: B=A+R3    -   3: C=B+R4    -   4: D=R5+R6    -   5: E=D+R7    -   6: F=B+E

The distribution graph of Instruction Set 4 is depicted in FIG. 7E.

Beginning with block 802, compiler designates instruction operationsA=R1+R2 and D=R5+R6 as local operations, because both can be performedbased on local register content (R1, R2, R5, R6). Note the designationof instruction operations A and D as local does not mean that they arelocal to each other; to the contrary, as discussed below, the ALUs thatperform A and D may be beyond local range.

Instruction operation B=A+R3 is also designated local because registercontent of R3 is locally available, and instruction operation B can beassigned to an ALU local to whatever ALU is assigned to executeinstruction operation A. Similarly, instruction operation C=B+R4 isdesignated as local, because register content of R4 is locallyavailable, and thus instruction operation C can be assigned to an ALUlocal to whatever ALU is assigned to execute instruction operation B.Similarly, instruction operation E=D+R7 is designated as local, becauseregister content of R7 is locally available, and thus instructionoperation E can be assigned to an ALU local to whatever ALU is assignedto instruction operation D. Instruction operation F=C+E would bedesignated as global, because the ALUs that would execute instructionoperations C and E are not local to each other and thus a globalcommunication will be needed which cannot be guaranteed to complete inone clock cycle.

At block 803, processor 400 begins a new instruction word 1502A.

At block 804, processor 400 selects a node for assignment to an ALU ininstruction word 1502A. By way of non-limiting example, if the nodes inFIG. 7E are each one step, then instruction operation A=R1+R2 isdetermined at block 902 to be the critical path because the path fromA−F (A−B−C−F) has the most steps (four) in the dependency graph. (By wayof counter example, if node E for some reason had five steps, then D−Fmight be the critical path.) At block 904, instruction operation A isdetermined not to violate any rule. Thus, at block 906, node A isselected for assignment.

At block 806, an ALU is selected for instruction operation A as residentin node A, and placed into an instruction word 1402A. In this case thereare no pending rules in play, and processor 400 may assign instructionoperation A to any ALU that can handle it, e.g., ALU 602 such as shownin FIG. 15A.

At block 808, processor 400 identifies node B as a dependent node thatcan be added to instruction word 1502A because (1) instruction operationB is dependent upon instruction operation A, (2) instruction operation Bwas designated as local, (3) a local ALU (604) is available, (4) theinstruction word 1502A is not full, (5) instruction operations A and Bcan be completed in one clock cycle and (5) no other rule prevents it.

Processor 400 does not identify any other dependent nodes that can beadded to the word, as there are no other nodes directly dependent uponnode A. Node C is indirectly dependent from nodes A through B, but withstandard ALUs per this example three sequential operations could not becompleted in a clock cycle and the ALUs are not otherwise configured toprocess 3 inputs. The same would apply to any nodes further dependentfrom node C. (However, if an ALU was available that could handle threeinputs and/or circumstances existed by which three sequentialinstruction operations could be performed in one clock cycle, then Ccould potentially be inserted into the same word.)

At block 810, the instruction operation of identified node B is assignedto ALU 604 as local to ALU 602 on which it depends, and inserted intoinstruction word 1402A per its dependent relationship as shown in FIG.14B.

At block 812, the dependency graph is updated to remove the assignednodes from those that still need assignment.

At block 814, the instruction word 1402A is determined to not yet becomplete, because it has two slots remaining, and there are still nodesto add that would not violate any rule for the current instruction word.Control thus returns to block 804 for consideration of the remainingportion of the dependency graph.

At this point, the previously assigned nodes A and B are no longerconsidered for further assignment. Per block 902, the system seeks outthe node along the longest remaining critical path, which in thisexample is instruction operation D=R5+R6. Inclusion of instructionoperation D in word 1502A does not violate any rule at 904, and can thusbe assigned to the current instruction word 1502A.

At block 806, processor 400 assigns the instruction operation of node Dto an ALU. Since node D is an independent node, compiler may assign itto any ALU that is not already in use and/or part of another localrelationship. Thus ALU 602 and 604 are unavailable due to priorassignment in the instruction word 1502A, but even if one was in usewhile the other was unassigned, processor 400 may prefer to avoideither, as they are part of an existing local relationship. In thisexample, processor assigns instruction operation D to ALU 614corresponding to that slot of word 1502A as shown in FIG. 15C.

At block 808, processor 400 identifies node E as a dependent node thatcan be added to instruction word 1502A because (1) instruction operationE is dependent upon instruction operation D, (2) instruction operation Dwas designated as local, (3) a local ALU (616) is available, (4) theinstruction word 1502A is not full, (5) instruction operations D and Ecan be completed in one clock cycle, and (6) no other rule prevents it.At block 810, processor 400 assigns instruction operation E to ALU 616corresponding to that slot of word 1502A as shown in FIG. 15D.

Control then passes to block 814 to see if the instruction word 1502A iscomplete. In this case, the instruction word 1502A is complete for atleast two reasons. First, the word 1502A is full, in that all slots arefilled with instructions. Second, the only remaining instructionoperations C=B+R3 and F=C+E cannot be included, instruction operation Cfor the reason discussed above, and instruction operation F because asdesignated global it cannot be present in the same instruction word asthe local instruction operation upon which it depends (the two could notbe executed in parallel). Control at block 816 thus sets the flag toindicate the word is full. At block 818, processor 400 determines thatinstruction operations still remain for assignment, so a new word 1502Bis created at block 803 as shown in in FIG. 15E.

At block 804, processor 400 identifies the next node as C, which is thelowest in the critical path. Inclusion of instruction operation C inword 1502B would not violate any rule, and thus at block 806,instruction operation C can be assigned to the current instruction word1502B.

Since instruction operation C is dependent upon instruction operation B,and local to the ALU to which instruction operation B is assigned,processor 400 preferably assigns instruction operation C to an ALU localto the ALU to which instruction operation B is assigned. Sinceinstruction operation B is assigned to ALU 604 and ALU 602 is local,then ALU 602 is the preferred selection. Processor 400 assignsinstruction operation C to ALU 602, corresponding to that slot of word1502B as shown in FIG. 15E.

At block 808, compiler looks for dependent nodes from C that it caninclude in the same word. Node F is dependent from C (F=C+E). However,as discussed above instruction operation F requires a globalcommunication, and thus would violate a rule if placed in the sameinstruction word as instruction operation C. Thus, instruction operationF cannot be added to the instruction word 1502B. Similarly, any furtherdependent node that depends from node F could not be added for the samereason.

At block 812 the dependency graph is adjusted to account for theassignment of the instruction operation of node C.

At block 814, the word 1502B is considered complete. Even though slotsremain, inclusion of the remaining node F would be a rule violation. Aflag is thus set at block 816, a new instruction word 1502C is needed atblock 818, and is created at 803.

At block 804, the critical path is node F as the sole remaining node.Selection options for inclusion in instruction word 1502C at block 806are limited. The only available option in this case is ALU 604. Thereason arises from a combination of circumstances. First, with F=C+E,instruction operation E was two instruction words prior at 1502A, andthus the result of E will have a clock cycle from the intercedinginstruction word 1402B to travel globally to wherever it needs to go.Second, ALU 604 is local to ALU 602 that performed instruction operationC, such that the result of instruction operation C is locally availableto provide for instruction operation F. Thus if instruction operation Fis assigned to 604, it can locally receive the output of instructionoperation C and globally receive the output of instruction operation E.The assignment is shown in FIG. 15F. After that, the instruction word1502C would close in the manner described above.

In contrast, no other ALU in instruction word 1502C could accommodateinstruction operation F, since all of the other ALUs would be global tothe ALU 602 that produces the output of C. If ALU 604 were for anyreason unavailable in instruction word 1502C, then the process wouldhave to cycle through again, to create an new instruction word 1502D,for which in the given the circumstances, instruction operation F couldbe placed in any slot/ALU, such as shown in FIG. 15G.

In the above examples, each instruction operation is described as beingcompleted in one clock cycle. However, there are many instructionoperations that cannot be completed in one clock cycle, and thus theresult of that instruction operation may not be ready for the nextinstruction word. Processor 400 accounts for this by delaying insertionof a dependent node into a new word for as many clock cycles as neededfor the instruction operation to complete. For example, in Example 5 ifinstruction operation D required two full clock cycles to complete, theninstruction operation E would not be inserted into word 1502A, butinstead would have to wait for insertion until instruction word 1502C asshown in FIG. 15H. Instruction operation F could therefore only beinserted in instruction word 1504 at ALU 614, as that ALU is local tothe ALU that generated the output of instruction operation E, and globalto the ALU that generated the output of instruction operation C; if 614were unavailable for any reason, then instruction operation F would needto be placed into a new word 1502E (not shown).

FIGS. 15A-15H utilized a mapped instruction word format for instructionwords 1502. However, as discussed above, this need not be the case ifthe individual instruction operations as associated with the slots, havean ALU identifier. FIGS. 151 and 15J show non-limiting examples offormats of instruction words.

The above process may be run once, or multiple times for optimizationpurposes. An overall goal of the compiler's efforts is to minimize thenumber of instruction words. In some cases, strict adherence to theprocess may not satisfy that goal. For example, an earlier decision toplace certain instructions in certain slots may influence whatinstructions can be inserted in later instruction words, creating anoverall non-optimal set of instruction words. For example, if aparticular independent node is placed in the last available slot of aword, this may force a dependent instruction node into a differentinstruction word. It may be optimal instead for that particularindependent node and its dependent node to be in the same instructionword, and the noted last slot reserved for a different independentinstruction node. In another example, in Examples 1-5 above, many of theALUs are not used, and it may be possible during optimization (such asat block 804 and/or after completion of the initial ALU assignment) toinsert later instruction operations into some of these empty slots.

A particular goal of the optimization process may be to minimize thenumber of global communications.

Optimization considerations may thus be considered rules in theflowchart of FIG. 8, e.g., normally the other rules would allowplacement of an instruction into a slot, but a finding that suchplacement is not optimal for the overall execution of the program mayoverride those rules in favor of not including the instruction in aparticular slot. The reverse is true for empty slots, in that if a slotis empty when applying the base rule set, but optimization indicatesthat it should filled with another instruction (perhaps from a distantunrelated branch of the graph) without violating the guarantee, thenoptimization considerations can trump the rule set.

The assignment of instruction operations to instruction words may beperformed before and after assignment of registers. Specifically, thereare only a finite number of registers that can provide values for theALUs to process. However, during the earlier stages of compiling theprogram, it may be assumed that there is no limit on the number ofregisters, and then later as an optimization step the number ofregisters can be limited. The methodology of FIG. 8 may thus beperformed before the assignment of registers. Once registers are laterconsidered fixed, the process may be rerun at least in part, to makechanges in response to any conflict in register allocations.

As noted above, each core of the processor 400 may have its own datapath. Thus, separate instruction words can be created for each data pathand executed simultaneously by its particular core.

Once the program is compiled into the instruction words 1002, theprocessor 400 can execute sequentially the instructions words 1002A-n ina manner known in the art. The instruction operations in eachinstruction word can be performed in parallel, and the instruction wordsare executed in the compiled order.

As noted above, the designation of local/global at block 802 may not beentirely accurate, and thus the assignment of certain instructionoperations to instruction words and/or ALU may raise violations. Duringexecution, scheduler 410 of processor 400 identifies violations in realtime, e.g., if an instruction operation was compiled as local in a priorinstruction word yet would result in a violation, scheduler 410 candelay the execution of the instruction word by one or more clock cyclesto provide time for the global signals to reach their destination.

An embodiment of the execution steps by processor 400 are shown in FIG.16. At block 1602, the next instruction word is selected (which for thefirst run would be the first instruction word). At block 1604, processor400 analyzes the selected instruction word to see if its execution wouldin any way violate the guarantee. If not, processor 400 executes theinstruction word at block 1608. If there is a violation, then processor400 at block 1606 delays the execution process by as many clock cyclesas needed for the violation to clear, i.e., if two clock cycles areneeded for the global communication before executing the nextinstruction word, then processor 400 will delay execution for two clockcycles before continuing to block 1608 for execution of the instructionword. Processor 400 at block 1610 determines whether the executedinstruction word is the last word, and if so, the processes ends and ifnot, control returns to 1502 for the next instruction word. The act ofdelaying may be to taking no action (i.e., not sending an instructionword), generating a bubble instruction word that lacks instructionoperations, and/or generating an instruction word that containsinstruction operations for the ALUs to take no action during acorresponding clock cycle. The invention is not limited to the nature ofhow the delay is executed.

Embodiments of the invention are scalable. As discussed above, FIG. 6shows a data path with four ALUs. FIG. 17 shows a data path with eightALUs 1702 connected by a pathway 1704. FIG. 18 shows a data path withsixteen ALUs 1802 connected by a pathway 1804. The number of ALUs withina data path may only be limited by the size, shape and desired expenseof processor 400.

As discussed above, ALUs may be complex or simple, and data paths tendto include at least one of each. In FIGS. 6, 17 and 18, some of the ALUsmay be complex, such by way of non-limiting example as shown in FIG. 19where the configuration includes seven simple ALUs 1902 and one complexALU 1904. In another embodiment, complex ALU 2004 may be provided andavailable globally to mirrored local ALUs 2002, such as shown in FIG.20.

Referring now to FIG. 21, another embodiment of the invention is shown.In this embodiment, a mirrored ALU pair of simple ALUs 2102 and 2104 arematched with a complex ALU 2106. ALUs 2102 and 2104 along with pathway2108 are the same as described with respect to FIG. 6. In addition, ALU2104 has an output on a different side from the side that faces ALU2102, and that output feeds a side of complex ALU 2106. The output ofALU 2106 may return to pathway 2108, which allows transmission to theinput of ALU 2102 or 2104; in addition and/or the alternative, theoutput of ALU 2106 may go directly into ALU 2104.

There are a variety of definitions of local that could be used in theabove embodiment. By way of non-limiting example, local can be definedas any communication between ALUs 2102/2104, 2104/2106 and ALU 2104 w/pathway 2108. Local could be defined as any communication between ALUs2102/2104 and output from 2104 to 2106, but not output from 2106 to 2102or 2104 (the distance being long enough to perhaps qualify as global).

FIG. 22 shows an example of a more detailed layout of a mirrored ALUpair such as shown in FIG. 5, with a pair of mirrored ALUs 2200 and 2250facing each other and separated by the collection of operand selectionunits and registers (hereinafter “operand selection network/registers”),shown generally at 2255. The definition of local for this embodiment maybe the distance between communications from ALU 2200 and 2250 to eachother through the operand selection network 2255, which within suchdistance includes any values present in the registers that are to beprovided to ALU 2200 and/or 2250. The definition of local may exclude orinclude communications of either ALU 2200, or 2250 to itself.

In FIG. 22, the lowest significant bits of operand A are received by ALU2200 from operand selection network 2255 via coupling 2203. The mostsignificant bits of operand A are received by ALU 2200 from operandselection network 2255 via coupling 2201. The lowest significant bits ofoperand B are received by ALU 2200 from operand selection network 2255via coupling 2204. The most significant bits of operand B are receivedby ALU 2200 from operand selection network 2255 via coupling 2202. Thelowest significant bits of result (A+B) of ALU 2200 are sent to operandselection network 2255 via coupling 2211. The most significant bits ofresult (A+B) of ALU 2200 are sent to operand selection network 2255 viacoupling 2210.

The lowest significant bits of operand C are received by ALU 2250 fromoperand selection network 2255 via coupling 2253. The most significantbits of operand C are received by ALU 2200 from operand selectionnetwork 2255 via coupling 2251. The lowest significant bits of operand Dare received by ALU 2200 from operand selection network 2255 viacoupling 2254. The most significant bits of operand D are received byALU 2200 from operand selection network 2255 via coupling 2252. Thelowest significant bits of result (C+D) of ALU 2200 are sent to operandselection network 2255 via coupling 2261. The most significant bits ofresult (C+D) of ALU 2200 are sent to operand selection network 2255 viacoupling 2260.

FIG. 23 shows a more detailed layout of a mirrored ALU pair incombination with a complex ALU such as shown in FIG. 21, with a pair ofmirrored ALUs 2300 and 2350 facing each other, and separated by thecollection of operand selection units (see 215/220/221/222 discussedabove) and registers (hereinafter “operand selectionnetwork/registers”), shown generally at 2355, and for which ALU 2300sends its output to complex ALU 2398. The definition of local for thisembodiment may be defined by the distance between adjacent ALUs. Thuslocal communications include: (a) communications from ALU 2300 and 2350to each other, through the operand selection network 2355 (which withinsuch distance includes any values present in the registers that are tobe provided to ALU 2300 and/or 2350), (b) communications from ALU 2300to complex ALU 2398, and (c) communications from complex ALU 2398 toALUs 2300 and/or 2350 via operand switch network/registers 2355. Undersuch a definition, communications from ALU 2350 to complex ALU 2398 areglobal because they are not adjacent (the output of ALU 2350 would needto travel through ALU 2300 to reach ALU 2398), although anotherdefinition of local could be preset that would consider suchcommunications local. The definition of local may exclude or includecommunications of either ALU 2200 or 2250 to itself.

The couplings and connection between 2300 and 2350 are similar as inFIG. 22. The ALU 2398 provides result to operand selection network viacoupling 2355. The ALU 2398 adder path is split into lowest significantbits ALU 2320, and highest significant bits ALU 2321 to speed upaddition operation. Rather than computing sum for 16 bitsA[15:0]+B[15:0] it is split into adding A[7:0]+B[7:0] andA[15:8]+B[15:8]+carry from A[7:0]+B[7:0]. Please note that binary digitshave only 2 values: 0 and 1. Therefore we may be able calculateA[15:8]+B[15:8]+0 and A[15:8]+B[15:8]+1 and then use carry fromA[7:0]+B[7:0] computed in 2320 sent vial coupling 2330 and 2332 toselect result A[15:8]+B[15:8]+0 if 2330 is 0 and select resultA[15:8]+B[15:8]+1 if 2330 is 1. The selection for result of A+B sent tooperand selection 2355 network via 2310 after being selected by 2322,where 2340 has result of A[15:8]+B[15:8]+0 and 2341 has resultA[15:8]+B[15:8]+0, and 2322 select 2340 is 2330 is 0 and select 2341 if2330 is 1. The same concept applies for 2313.

Since A[15:8]+B[15:8]+0 and A[15:8]+B[15:8]+1 can be calculated withoutknowing result of carry of A[7:0]+B[7:0] without waiting on carry 2330which is same signal as 2332. Now, the result can be pre-computed andthe final result selected, based on 2330 (2332 is same signal). The 2330is routed from the middle of ALU.

FIG. 24 shows a higher level layout of FIG. 23 in combination with otherALUs in the same layout. Operand switch units within operand switchnetwork/registers 215 are the pathway by which data and control signalsreach the various groups of ALUs. Under the definitions of localdiscussed with respect to FIG. 23, such data and control signals aretypically considered global, although certain ones may be local underthe appropriate definition.

In some embodiments, there may be different definitions of local fordifferent ALUs or different circumstances. The clock speed could be setto be long enough to account for the worst case combination of time ofoperation and time of transmission, plus overhead factors.

The specification and drawings are, accordingly, to be regarded in anillustrative rather than a restrictive sense. It will, however, beevident that various modifications and changes may be made thereuntowithout departing from the broader spirit and scope of the invention asset forth in the claims.

What is claimed is:
 1. A computer hardware device having a clock speedand a clock cycle, the device comprising: a plurality of arithmeticlogic units (ALU) within a data path including a first, second and thirdALUs, the second ALU being within a locally predefined range of thefirst ALU and the third ALU being outside of the locally predefinedrange of the first ALU, wherein the locally predefined range is smallerthan the data path; the device being programmed to execute a series ofinstructions stored in a non-transitory memory to perform operations,the operations comprising: first assigning a first instruction operationto the first ALU; first determining, for a second instruction operationhaving an input that depends directly on an output of a firstinstruction operation, whether all inputs for the second instructionoperation are available within a locally predefined range from the firstALU; second assigning, in response to at least a positive result of thefirst determining, the second instruction operation to the second ALU;in response to a negative result of the first determining: ensuring apause of at least one clock cycle will occur between execution of thefirst instruction operation and the second instruction operation; andthird assigning the second instruction operation to an ALU of theplurality of ALUs.
 2. The device of claim 1, wherein a clock speed ofthe device is defined in part by a worst case time of transmissionbetween a consumer ALU and producer ALU of the plurality of ALUs withinthe locally predefined range.
 3. The device of claim 1, wherein thelocally predefined range is a distance between two adjacent ALUs.
 4. Thedevice of claim 3, wherein the locally predefined range is furtherdefined by inputs and outputs of the two adjacent ALUs facing eachother.
 5. The device of claim 1, wherein the first and second ALU arethe same, and the locally predefined range is an ALU to itself.
 6. Thedevice of claim 1, wherein: the plurality of ALUs in the data pathincludes a third ALU that is outside the locally predefined range fromthe first ALU; the clock cycle of the device is shorter than an amountof time to needed to guarantee that the third ALU (a) receives andselects an input produced from the first ALU and (b) executes the secondinstruction operation.
 7. The device of claim 1, wherein the ensuringfurther comprises: second determining whether the first and secondinstruction operations are already separated in time of execution by atleast one clock cycle of the device; and in response to a negativeoutcome of the second determining, inserting a delay of at least oneclock cycle of the device between execution of the first and secondinstruction operations.
 8. The device of claim 1, wherein the first andsecond assigning further comprises setting the first and secondinstruction operations to be executed during a same clock cycle of thedevice.
 9. A method for preparing a series of instruction operations forexecution on a device having plurality of arithmetic logic units (ALU)within a data path including at least first, second and third ALUs, thesecond ALU being within a locally predefined range of the first ALU andthe third ALU being outside of the locally predefined range of the firstALU, the locally predefined range being smaller than the data path, themethod comprising: first assigning a first instruction operation to thefirst ALU; first determining, for a second instruction operation havingan input that depends directly on an output of a first instructionoperation, whether all inputs for the second instruction operation areavailable within a locally predefined range from the first ALU; secondassigning, in response to at least a positive result of the firstdetermining, the second instruction operation to the second ALU; inresponse to a negative result of the first determining: ensuring a pauseof at least one clock cycle will occur between execution of the firstinstruction operation and the second instruction operation; and thirdassigning the second instruction operation to an ALU of the plurality ofALUs.
 10. The method of claim 9, wherein a clock speed of the device isdefined in part on a worst case time of transmission between a consumerALU and producer ALU of the plurality of ALUs within the locallypredefined range.
 11. The method of claim 9, wherein the locallypredefined range is a distance between two adjacent ALUs.
 12. The methodof claim 11, wherein the locally predefined range is further defined byinputs and outputs of the two adjacent ALUs facing each other.
 13. Themethod of claim 9, wherein the first and second ALUs are the same, andthe locally predefined range is an ALU to itself.
 14. The method ofclaim 9, wherein: the clock cycle of the device is shorter than anamount of time needed to guarantee that the third ALU (a) receives andselects an input produced from the first ALU and (b) executes the secondinstruction operation.
 15. The method of claim 9, wherein the ensuringcomprises: second determining whether the first and second instructionoperations are already separated in time of execution by at least oneclock cycle of the device; and in response to a negative outcome of thesecond determining, inserting a delay of at least one clock cycle of thedevice between execution of the first and second instruction operations.16. The method of claim 9, wherein the first and second assigningfurther comprises setting the first and second instruction operations tobe executed during a same clock cycle of the device.
 17. Anon-transitory computer readable medium storing instructions to performoperations to assign instruction operations to a device, the devicehaving a clock speed and a clock cycle and comprising a plurality ofarithmetic logic units (ALU) within a data path including at least threeALUs, the operations comprising: first assigning a first instructionoperation to the first ALU; first determining, for a second instructionoperation having an input that depends directly on an output of a firstinstruction operation, whether all inputs for the second instructionoperation are available within a locally predefined range from the firstALU; second assigning, in response to at least a positive result of thefirst determining, the second instruction operation to the second ALU;in response to a negative result of the first determining: ensuring apause of at least one clock cycle will occur between execution of thefirst instruction operation and the second instruction operation; andthird assigning the second instruction operation to an ALU of theplurality of ALUs.
 10. The method of claim 9, wherein a clock speed ofthe device is defined in part on a worst case time of transmissionbetween a consumer ALU and producer ALU of the plurality of ALUs withinthe locally predefined range.
 18. The device of claim 17, wherein aclock speed of the device is defined in part on a worst case time oftransmission between a consumer ALU and producer ALU of the plurality ofALUs within the locally predefined range.
 19. The device of claim 17,wherein the locally predefined range is a distance between two adjacentALUs.
 20. The device of claim 19, wherein the locally predefined rangeis further defined by inputs and outputs of the two adjacent ALUs facingeach other.
 21. The device of claim 17, wherein the first and second ALUare the same, and the locally predefined range is an ALU to itself. 22.The device of claim 17, wherein: the plurality of ALUs in the data pathincludes a third ALU that is outside the locally predefined range fromthe first ALU; the clock cycle of the device is shorter than an amountof time to needed to guarantee that the third ALU (a) receives andselects an input produced from the first ALU and (b) executes the secondinstruction operation.
 23. The device of claim 17, wherein the ensuringfurther comprises: second determining whether the first and secondinstruction operations are already separated in time of execution by atleast one clock cycle of the device; and in response to a negativeoutcome of the second determining, inserting a delay of at least oneclock cycle of the device between execution of the first and secondinstruction operations.
 24. The device of claim 17, wherein the firstand second assigning further comprises setting the first and secondinstruction operations to be executed during a same clock cycle of thedevice.